0

我目前有一些 javascript/jquery 代码,如果没有选中任何框,则会显示错误消息。但是,当我选中一个框并提交表单时,仍然会显示错误消息。

任何帮助都会很棒!

javascript代码

    var hobbies = $('#hobbies').val();
    if ($('#hobbies :checkbox:checked').length === 0){
    $("#multichk").after('<span class="error">Please choose at least one.</span>');
    hasError = true;
    }

html代码:

 <input type='checkbox' id='hobbies' name='hobbies[0]' value='1'/><label for='hobbies0'>football</label><br />

 <input type='checkbox' id='hobbies' name='hobbies[1]' value='2'/><label for='hobbies1'>soccer</label><br />

 <input type='checkbox' id='hobbies' name='hobbies[2]' value='3'/><label for='hobbies2'>baseball</label><br />

 <input type='checkbox' id='hobbies' name='hobbies[3]' value='4'/><label for='hobbies3'>tennis</label><br />

 <input type='hidden' id='multichk' />

谢谢你。

4

2 回答 2

2

您命名和识别复选框的方式,它们不会属于同一组,也不会被正确识别。

页面上的每个元素在被识别时都必须具有唯一的 ID,并且对于一组复选框或单选按钮,要作为一个组进行验证和交付,该组的每个成员必须具有相同的名称。

for鉴于这些规则,标签标签的属性引用元素的id属性而不是其属性也就不足为奇了name

现在,我猜您正在使用 PHP 作为服务器端语言(基于复选框名称中的括号),在这种情况下,复选框应该声明如下:

<input type='checkbox' id='hobbies0' name='hobbies[]' value='1'/>
<label for='hobbies0'>football</label><br />

<input type='checkbox' id='hobbies1' name='hobbies[]' value='2'/>
<label for='hobbies1'>soccer</label><br />

<input type='checkbox' id='hobbies2' name='hobbies[]' value='3'/>
<label for='hobbies2'>baseball</label><br />

<input type='checkbox' id='hobbies3' name='hobbies[]' value='4'/>
<label for='hobbies3'>tennis</label><br />

[注意:标签仅移动到下一行以删除代码框中的水平滚动]

理顺 HTML 后,jQuery 将如下所示:

if($('input:checkbox[name="hobbies[]"]:checked').length === 0){
    $("#multichk").after('<span class="error">Please choose at least one.</span>');
    hasError = true;
}

选择器格式参考

如果该选择器仍然给您带来麻烦,那么您可能需要在方括号前加上双反斜杠,如下所示:

if($('input:checkbox[name="hobbies\\[\\]"]:checked').length === 0){

双反斜杠的参考

希望这可以帮助

于 2012-05-25T03:00:08.880 回答
1

从技术上讲,您的 HTML 无效;具有相同 id 的多个元素是非法的。您应该使用类选择器而不是 id 选择器...

无论如何,最简单的方法是将跨度放在那里并在有人选中复选框时将其清除。

<input type='checkbox' id='hobbies' name='hobbies[0]' value='1'/><label for='hobbies0'>football</label><br />

 <input type='checkbox' id='hobbies' name='hobbies[1]' value='2'/><label for='hobbies1'>soccer</label><br />

 <input type='checkbox' id='hobbies' name='hobbies[2]' value='3'/><label for='hobbies2'>baseball</label><br />

 <input type='checkbox' id='hobbies' name='hobbies[3]' value='4'/><label for='hobbies3'>tennis</label><br />

 <input type='hidden' id='multichk' />

 <span id="error_message" class="error"></span>

然后你的js:

var hobbies = $('#hobbies').val();
if ($('#hobbies:checked').length === 0) {
    $('#error_message').innerHTML('Please choose at least one.');
    hasError = true;
} else {
    $('#error_message').innerHTML('');
    hasError = false;
}

您可以通过设置处理程序在他们单击复选框时重置它:

function changed(checkbox) {
  return function() { 
    if (checkbox.checked) {
      $('#error_message').innerHTML('');
      hasError = false;
    }
  }
}

var checkboxes = document.querySelector('#hobbies')
for (var i=0; i<checkboxes.length; ++i) {
  checkboxes[i].onchange = changed(checkboxes[i]);

以上是想法;这个小提琴中的工作代码。

于 2012-05-25T02:50:45.897 回答