#javascript #html
#javascript #HTML
Вопрос:
Это флажки в моем HTML:
<input type="checkbox" name="sides" id="1" value="French Fries" >French Fries<br />
<input type="checkbox" name="sides" id="2" value="Baked Potato">Baked Potato<br />
<input type="checkbox" name="sides" id="3" value="Cole Slaw">Cole Slaw<br />
<input type ="button" value = "Enter my side dish selections" onclick="checkbox(sides.value1,sides.value2)"/>
Я хочу, чтобы, когда пользователь нажимает на кнопку, он должен принимать первые два флажка, а затем отображать его как:
function checkbox(dish1,dish2) {
document.getElementById("side_one").innerHTML = dish1;
document.getElementById("side_two").innerHTML = dish1;
}
Я не понимаю, как это сделать, не могли бы вы помочь мне здесь.
Комментарии:
1. Даже если вы хотите отобразить только 2 параметра, хотите ли вы, чтобы пользователь также выбирал все 3 параметра радио?
2. @Gautham, предполагая, что пользователь выбирает только два варианта — затем нажимает кнопку. Есть много вариантов, но я включил только три, чтобы избежать длинного вопроса.
Ответ №1:
Вы можете выбрать первые два проверенных ввода с [...document.querySelectorAll( ":checked" )].slice( 0, 2 );
помощью .
Что он делает, так это создает массив из списка узлов, составленного из всех элементов, соответствующих :checked
псевдоклассу, и нарезает его в новый массив из двух элементов.
Затем вам просто нужно захватить .value
найденные элементы <input>:
document.querySelector('[type="button"]').onclick = (evt) => {
const checked = [...document.querySelectorAll( ":checked" )].slice( 0, 2 );
checkbox( ...checked.map( (input) => input.value ) )
};
function checkbox(dish1 = "", dish2 = "") {
document.getElementById("side_one").innerHTML = dish1;
document.getElementById("side_two").innerHTML = dish2;
}
<input type="checkbox" name="sides" id="1" value="French Fries" >French Fries<br />
<input type="checkbox" name="sides" id="2" value="Baked Potato">Baked Potato<br />
<input type="checkbox" name="sides" id="3" value="Cole Slaw">Cole Slaw<br />
<input type ="button" value = "Enter my side dish selections"/>
<p id="side_one"></p>
<p id="side_two"></p>
Если вы хотите, чтобы он выполнял поиск только в содержимом определенного элемента, вам просто нужно сделать селектор CSS querySelectorAll
более конкретным.
Ответ №2:
Вы можете использовать что-то вроде следующего:
Array.from(document.getElementsByName('entree')).filter(input => input.checked).map(input => input.value)
Это делает массив из интересующего списка узлов, отфильтровывает все непроверенные элементы и возвращает массив, который будет иметь ноль или более значений в зависимости от того, что проверено. Затем вы можете .join() или иным образом поступить так, как считаете нужным.
Ответ №3:
по сути, radio — это список узлов, поэтому вы можете сделать это
const radioValue = (radio.length > 0) ? radio[0].value : "";