#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
<script language="javascript" type="text/javascript">
$('#leftDiv').ready(function(){
$("form").submit(function () {
//data structure
var radios = [];
//for printing purposes
var arrayValues = $("#arrayVal");
//Getting the values
$("form :radio:checked").each(function() {
radios = $(this).attr('value');
});
//Printing the values
$.each(radios, function( index, value ){
arrayValues.append(
$(value)
);
});
})
});
</script>
HTML «КОД»
<html>
<body>
<div id="leftDiv" class="container">
<form action="" method="get">
<fieldset>
<p>Something 0</p>
<lable>Yes</label>
<input type="radio" name="Group0" value="1" >
<lable>No</label>
<input type="radio" name="Group0" value="0" >
</fieldset>
<fieldset>
<p>Something 1</p>
<lable>Yes</label>
<input type="radio" name="Group1" value="1" >
<lable>No</label>
<input type="radio" name="Group1" value="0" >
</fieldset>
<fieldset>
<p>Something 2</p>
<lable>Yes</label>
<input type="radio" name="Group2" value="1" >
<lable>No</label>
<input type="radio" name="Group2" value="0" >
</fieldset>
<fieldset>
<input type="submit" name="update" class="button" value="Submit">
</fieldset>
</form>
</div>
</body>
</html>
Не знаю почему, но могу получить только последнее значение из группы radio.
Что я делаю не так?
Ответ №1:
Вместо
radios = $(this).attr('value');
попробуйте
radios.push($(this).attr('value'));
Комментарии:
1. лол, хорошо, edoloughlin работает как шарм, ну, я обнаружил, что это тоже сработает, но не знаю, есть ли какая-либо разница: …функция (индекс) radios [index] = $ (this).attr(‘value’);
Ответ №2:
$("form :radio:checked").each(function(i) {
radios[i] = $(this).val();
});
Получите значение, а не атрибут.
Комментарии:
1. Просто для пояснения
.attr("value")
— это дьявол и источник многих ошибок. никогда не используйте это.
Ответ №3:
Я думаю, что это должно быть:
//Getting the values
$("form :radio:checked").each(function() {
radios.push($(this).attr('value'));
});
Ответ №4:
Когда вы получаете значения, у вас есть эта строка JS:
radios = $(this).attr('value');
Вы, конечно, имели в виду что-то вроде radios[radios.length]
? Помогает ли это вообще?
Ответ №5:
$("form :radio:checked").each(function() {
radios = $(this).attr('value');
});
Каждая итерация через each перезаписывает значение в radio. Вот почему, как только цикл существует, у вас есть только значение с последней итерации.
Ответ №6:
Я думаю, что каждый раз, когда вы переходите к функции $ («form: radio:checked»).each(), вы перезаписываете значение radio вместо того, чтобы добавлять к нему.
У вас есть это:
// Getting the values
$("form :radio:checked").each(function() {
radios = $(this).attr('value');
});
…вместо этого:
// Getting the values
$("form :radio:checked").each(function(i, e) {
radios[i] = $(e).attr('value');
});
…таким образом, когда цикл завершается, у вас остается только конечное значение.