2014-12-19 3 views
0

Я хочу найти все значения переключателей. Но он возвращает только одно значение. Мой код здесь.Найти все значения радиокнопки

$(document).on("click", ".content>span" , function(e) { 
     var p = $(this).parent('td'); 
     var RadiobtnValues = p.find("div").find('input').attr('value'); 
}); 

    <td class="ui-droppable ui-sortable content tbledata"> 
    <span> 
    <img src="images/Close-icon.png" class="close_img"> 
    <img src="images/expand.png" class="expand_img"> 
    <div class="form-group" id="radiooption"> 
     <label>Radio Button</label>    
     <input type="radio" name="radio_0" value="yes">Yes 
     <input type="radio" name="radio_0" value="no">No 
    </div> 
</span> 
</td> 
+0

Селектор JQ всегда возвращает массив согласованных элементов. Вам нужно либо перебрать массив радиообъектов, либо использовать '.map()' для получения всех значений. – Bharadwaj

+0

В вашем коде есть только 1 радиокнопка, пожалуйста, отправьте пример. –

+2

@ А.Рама, как вы имеете в виду только один? –

ответ

5

JQuery в «геттерной» функция, такая как attr возвращать только значение для первого элемента в наборе. Если вы хотите их всех, вам понадобится петля. Это, например, даст вам множество из них:

var RadiobtnValues = p.find("div").find('input').map(function() { 
    return this.value; 
}).get(); 

Примечания: Ничего там проверки, выбрана ли кнопка радио (ы) в вопросе, это не возвращает их значений вы выбраны ли они или не. Если вы просто хотите, значения выбранных:

var RadiobtnValues = p.find("div").find('input:checked').map(function() { 
    return this.value; 
}).get(); 

Или, возможно, как объект с именем каждой кнопки радио в качестве ключа:

var RadiobtnValues = {} 
p.find("div").find('input:checked').each(function() { 
    RadiobtnValues[this.name] = this.value; 
}); 
+0

Спасибо @ T.J. Crowder. Его работа – vel

+0

Из интереса, какое значение имеет вызов '.get()'? – mattytommo

+1

@mattytommo: 'map' jQuery (в отличие от JavaScript) возвращает набор jQuery, обернутый вокруг значений (даже если они не являются элементами DOM, что мы обычно думаем о наборах jQuery); 'get' преобразует это в истинный массив. –

0

Как о чем-то вроде этого

$(document).on("click", ".content>span" , function(e) { 
    var allRadioBoxValues = []; 
    var p = $(this).parent('td'); 
    var RadiobtnValues = p.find("div").find('input'); 
    RadiobtnValues.each(function(index,elem){ 
     allRadioBoxValues.push(elem.value); 
    }); 
    // now 'allRadioBoxValues' will have array of radio button values 
}); 
0

Как говорится в docs:

Метод .attr() получает значение атрибута только для первого элемента в согласованном наборе. Чтобы получить значение для каждого элемента по отдельности, использует конструкцию цикла, такую ​​как метод .each() или .map() jQuery.

Это означает, что когда у вас будет больше элементов, он вернет только attr первого. Чтобы получить все атрибуты, вы можете определить массив:

var RadiobtnValues = new Array(); 
p.find("div").find('input').each(function(index) { RadiobtnValues[i] = $(this).attr('value') }); 
+0

Это должно быть 'Array()', а не 'array()'. И подумайте об использовании 'map'. – Oriol

+0

вы правы! благодаря – Alex

Смежные вопросы