【问题标题】:For loop with jQuery使用 jQuery 循环
【发布时间】:2013-11-26 19:30:59
【问题描述】:

我正在创建一个带有单选按钮的 html 表单的调查。

用户回答了 5 个问题,然后点击调用 javascript 的提交按钮,我想要一个循环从每个单选按钮中获取值,并将它们放在一个变量中。

我的问题是,我无法找出在名为 currentVal 的变量中使用“i”的正确方法。

我正在寻找的结果应该类似于一个变量:“val1, val5, val3, val1, val4”

在这方面完全是新的,所以如果你能保持答案不友好;)

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

<script type="text/javascript">

    $(document).ready(function()
    {
        $('#check').click(function()
        {
            for (var i=0; i < 5; i++)
            {
                var currentQuestion = i;
                var currentVal = $("input:radio[name="+ i +"]:checked").val();
            }

            document.write(currentVal);

        });
    })

</script>
</head>

<body>
<form name="form" method="post" action="">
Question 1<br/>
<input type="radio" name="1" value="val1"/> Ans1
<input type="radio" name="1" value="val2"/> Ans2
<input type="radio" name="1" value="val3"/> Ans3
<br/><br/>
Question 2<br/>
<input type="radio" name="2" value="val1"/> Ans1
<input type="radio" name="2" value="val2"/> Ans2
<input type="radio" name="2" value="val3"/> Ans3
<br/><br/>
Question 3<br/>
<input type="radio" name="3" value="val1"/> Ans1
<input type="radio" name="3" value="val2"/> Ans2
<input type="radio" name="3" value="val3"/> Ans3
<br/><br/>
Question 4<br/>
<input type="radio" name="4" value="val1"/> Ans1
<input type="radio" name="4" value="val2"/> Ans2
<input type="radio" name="4" value="val3"/> Ans3
<br/><br/>
Question 5<br/>
<input type="radio" name="5" value="val1"/> Ans1
<input type="radio" name="5" value="val2"/> Ans2
<input type="radio" name="5" value="val3"/> Ans3

<input type="button" value="Test" id="check" />
</form>
</html>

【问题讨论】:

  • 你的第一个问题是你的名字组是1,而你的索引从0开始。
  • 你可以使用 jQuery .each 函数
  • 您的第二个问题是范围。您在 for 循环中声明 currentVal,然后尝试在 for 循环之外使用它。
  • 第三个问题是你在页面加载后使用document.write()。 @David - 在循环中声明变量很麻烦,但它可以在包含函数的任何地方访问,因为 JavaScript 没有块范围......
  • @nnnnnn 真的吗?很高兴知道。这仍然是不好的做法,但很高兴知道。

标签: javascript php jquery html


【解决方案1】:

试试this...

$('#check').click(function()
        {
            var temp ='';
            $(':radio').each(function(){
                if($(this).is(':checked'))
                  {
                      temp += $(this).val() + ',';
                  }
                });
            alert(temp.slice(0, -1));
        });

【讨论】:

  • 完美运行!非常感谢阿伦
【解决方案2】:

首先,要将所有字符串附加到逗号分隔值,请执行以下操作:

var result = "";
for (var i = 0; i < 5; i++) {
    if(result.length > 0) {
        result += ",";
    }
    result += $("input:radio[name=" + (i + 1) + "]:checked").val();
}
document.write(result);

恕我直言,最好的解决方案是在表单中添加一个类(例如“myForm”)并使用 jQuery 的 each() 函数:

var result = "";
$.each($(".myForm input:radio"), function(index, var) {
    if(result.length > 0) {
        result += ",";
    }
    result += var.val();
});
document.write(result);

【讨论】:

  • 您关于currentVal 范围的开场白是错误的:var 创建具有函数范围的变量,not 块范围。您的第一个代码块是朝着正确方向迈出的一步,但仍然不正确,因为 i 需要从 1 开始,而不是 0,并且 for$.each() 版本都在开头添加逗号result 字符串而不是在值之间。
  • 已更正,我一定有点困惑。 :)
  • 非常感谢 :D 那么正确的代码是什么样子的呢?如果我要使用 $.each() 版本(我真的很陌生)
  • 是的,你可以同时使用这两个版本,它们都可以工作。但试着了解这里真正发生了什么。 jQuery语法有点复杂(但代码更灵活),但第一个代码应该清楚。 ;)
猜你喜欢
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
  • 2012-09-06
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多