Извлекать значения из входных данных (radio) и распечатывать их где-нибудь… С ПОМОЩЬЮ jQuery

#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');
});
  

…таким образом, когда цикл завершается, у вас остается только конечное значение.