Как говорится в названии, какой лучший способ в JavaScript получить все радиокнопки на странице с заданным именем? В конечном итоге я буду использовать это, чтобы определить, какой конкретный переключатель выбран, так что еще один способ сформулировать вопрос:
Учитывая строковую переменную в JavaScript, как я могу определить, какой именно элемент ввода радиокнопок (если есть) с этой строкой, поскольку в настоящее время выбрано это имя?
Я не использую jQuery. Если вы хотите предоставить ответ jQuery, продолжайте. Кто-то может найти это полезным. Но это не поможет мне, и я не буду его продвигать.
Ответ 1
Вы можете использовать document.getElementsByName()
, передавая имя группы радио, а затем перебирайте их, проверяя атрибут checked
, например. что-то вроде:
function getCheckedValue( groupName ) {
var radios = document.getElementsByName( groupName );
for( i = 0; i < radios.length; i++ ) {
if( radios[i].checked ) {
return radios[i].value;
}
}
return null;
}
Ответ 2
Использовать document.getElementsByName() - это короткий ответ на заданный вами вопрос.
Однако, может быть, лучше сделать что-то вроде этого:
<form name="formFoo">
Foo: <input type="radio" name="groupFoo" value="foo" checked> <br />
Bar: <input type="radio" name="groupFoo" value="bar"> <br />
Baz: <input type="radio" name="groupFoo" value="baz"> <br />
<input type="submit" >
</form>
Затем используйте JavaScript:
function getRadioValue(formName, groupName) {
var radioGroup = document[formName][groupName];
for (var i=0; i<radioGroup.length; i++) {
if (radioGroup[i].checked) {
return radioGroup[i].value;
}
}
return null;
}
Таким образом, вы избегаете использования функции, которая ищет весь документ. Он просто ищет сначала для формы, а затем в этой форме для элементов управления с тем же именем. Проблема здесь в том, что если вы должны иметь флажок в середине формы с тем же именем, он может быть возвращен вместо правильного значения радио. Если другой тип управления был введен с тем же именем, это может привести к ошибке. Оба эти обстоятельства должны, вероятно, считаться ошибкой программиста, но это не помешало бы расширять функцию, чтобы проверить их, при некоторой потенциальной потере производительности. Просто измените строку:
if (radioGroup[i].checked) {
в
if (radioGroup[i].type=='radio' && radioGroup[i].checked) {
Ответ 3
getElementsByName не работает для меня. Я сделал это:
var radios = document.getElementsByTagName('input');
for (i = 0; i < radios.length; i++) {
if (radios[i].type == 'radio' && radios[i].checked) {
nbchecked++;
}
}
Ответ 4
var options = document.getElementsByName('myRadioButtons');
for(i = 0; i < options.length; i++)
{
var opt = options[i];
if(opt.type=="radio")
{
if(opt.checked)
{
}
}
}
Ответ 5
Я буду укусить ответ jQuery
var selectedValue = $("input[name='radio_name']:checked").val();
Ответ 6
<form name="myForm" id="myForm" action="">
<input type="radio" name="radioButton" value="c1">Choice 1
<input type="radio" name="radioButton" value="c2">Choice 2
</form>
<script>
var formElements = window.document.getElementById("myForm").elements;
var formElement;
var radioArray = [];
for (var i = 0, j = 0; i < formElements.length; i++) {
formElement = formElements.item(i);
if (formElement.type === "radio" && formElement.name === "radioButton") {
radioArray[j] = formElement;
++j;
}
}
alert(radioArray[0].value);
alert(radioArray[1].value);
</script>
Ответ 7
$("input[type='radio'][name='xxxxx']:checked").val()
Ответ 8
Чтобы получить все радиокнопки напрямую по имени:
element.querySelectorAll("input[name='nameOfTheName']")
Метод querySelectorAll()
может использоваться для получения элементов определенного типа по имени. Существуют преимущества использования querySelectorAll
по сравнению с getElementsByName()
в определенных ситуациях. Если вы используете getElementsByName
только на document
, вы получите сообщение об ошибке:
element_Name_Here.getElementsByName не является функцией
Но querySelectorAll()
может использоваться для подэлементов документа. Это полезно, когда вы хотите получить один элемент из нескольких элементов, все из которых имеют одну и ту же структуру (строки в списке). В этом случае вы можете не захотеть дать отдельный идентификатор каждой строке. В этой ситуации вызываемая функция может быть передана this
, получить parentNode и родительский, найти определенный атрибут. Это позволяет избежать необходимости поиска по всему документу.
HTML
<div>
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
</div>
<div>
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
</div>
<div>
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
</div>
<div>
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
<input type="radio" name="nameOfName" onchange="getOnlyThisRowsRadios(this)">
</div>
script
function getOnlyThisRowsRadios(thiz) {
var i,L,parentElement,radioButtons;
parentElement = thiz.parentNode;//Get the parent of the element
radioButtons = parentElement.querySelectorAll("input[name='nameOfTheName']");
console.log('radioButtons: ' + radioButtons)
L = radioButtons.length;
console.log('L: ' + L)
for (i=0;i<L;i++) {
console.log('radBttns[i].checked: ' + radBttns[i].checked)
radBttns[i].checked = false;//Un-check all checked radios
}