我正在创建一项调查。出于我的目的,JS验证很好,我想确保选择每个组中的单选按钮。默认情况下,不选择单选按钮。据我了解,用户代理自动将值设置为该组中的第一个单选按钮值。 例如:
<input type="radio" name="question_1" value="1">
<input type="radio" name="question_1" value="2">
<input type="radio" name="question_1" value="3">
虽然没有预选(视觉上),但我可以检查该组的值:
$('input[name="question_1"]').val();
这将返回“1”,即第一个单选按钮的值。这使我很难看到一个没有价值的“群体”。
现在,这是奇怪的地方。当我准备将数据发布到我的php脚本时,我从表格中抓住它:
$(pagesArray[currentPage]).children('form').serialize();
这很好地抓取了我的所有表单数据但是没有返回没有选中按钮的无线电组的值。为什么在没有选中任何内容时我没有得到组中第一个按钮的值?
答案 0 :(得分:4)
$('input[name="question_1"]').val();
想想这是做什么的。它选择与选择器匹配的所有元素。这是三个要素。然后它调用val
方法,该方法获取第一个属性的value
属性。 (如果选择中有多个元素,则返回第一个元素的值。)检查哪个(如果有)元素无关紧要:未选中的元素仍然具有value
属性集。
$(pagesArray[currentPage]).children('form').serialize();
然而,这是非常不同的逻辑。它查看浏览器将发送到服务器的字段。由于未发送未经检查的无线电字段,因此它们未被序列化。
所以引用你的问题:
用户代理自动将值设置为该组中的第一个单选按钮值
这是错误的。没有一个全局input[name="question_1"]
元素具有值集。有多个元素(没有选中),你只是得到了第一个元素的值。
答案 1 :(得分:2)
要获取单选按钮组的值,您应使用:checked
过滤器。像
$('input[name="question_1"]:checked').val()
示例 - jsFiddle
序列化只会根据jQuery api选择成功的控件,而一组没有选中的单选按钮不成功
摘录:
注意:只有“successful controls”序列化为字符串。没有 由于表单未提交,因此提交按钮值已序列化 使用按钮。对于要包含在表单元素中的值 序列化字符串,该元素必须具有name属性。价值来自 复选框和单选按钮(“radio”或“checkbox”类型的输入) 仅在检查时才包括在内。来自文件选择元素的数据 没有序列化。
答案 2 :(得分:0)
所有用户代理从未真正遵循在HTML 4中选择初始单选按钮的要求,并且已在HTML5中完成。我会手动检查列表中的第一个按钮并完成它。