2011-01-25 61 views
9

我有这段代码,但它似乎并没有返回true。警报总是显示出来。任何想法(不需要创建一个var来存储复选框已被选中,因为这似乎有点hacky)。jquery停止表单提交,除非选中复选框

感谢。检查checboxes检查的数量

$("#form").submit(function(e) { 
    $('input[type=checkbox]').each(function() { 
     if(this.checked){ 
      return true; 
     } 
    }); 
    alert("Please select at least one to upgrade."); 
    return false; 
}); 

回答

17

您不需要执行循环来确定是否选中了复选框。 :checked选择器过滤掉所有未检查的项目。然后,您可以使用$.length获取已检查输入的计数。

$("#form").submit(function(e) { 
    if(!$('input[type=checkbox]:checked').length) { 
     alert("Please select at least one to upgrade."); 

     //stop the form from submitting 
     return false; 
    } 

    return true; 
}); 

另外,使用你的方法,一个小的变化应该使这项工作

$("#form").submit(function(e) { 
    $('input[type=checkbox]').each(function() { 
     if($(this).is(':checked')){ 
      return true; 
     } 
    }); 
    alert("Please select at least one to upgrade."); 
    return false; 
}); 

我想你可以简单地缺少$()周围this

+0

谢谢。一个不错的清洁解决我为你自己的版本去看,因为它看起来更可读。 – edwardmlyte 2011-01-26 09:23:28

+0

我最近遇到了一个问题,e.preventDefault()在Firefox中不起作用。通过一些研究,我发现返回true或false会做同样的事情,并被广泛接受。我改变了我的答案以反映这种方法。 – Josh 2013-08-15 16:21:50

0

例...

<script> 

    function countChecked() { 
     var n = $("input:checked").length; 
     $("div").text(n + (n <= 1 ? " is" : " are") + " checked!"); 
    } 
    countChecked(); 
    $(":checkbox").click(countChecked); 

</script> 

上面 “$(” 输入:勾选 “)” 返回选中项的数组...你可以勾选“这个数组的长度“大于0.

+0

似乎有点多余做到这一点,如果我已经循环与jQuery数组。但我确实明白你的观点,我希望如果至少有一项被检查,我可以继续提交。 – edwardmlyte 2011-01-25 16:20:00

3

只是要指出,你使用的编号为#form。你的意思是指所有表格,还是表格的编号是form

+0

它有一个不同的ID,这就是我实际参考的内容。我只是改变它来简化。 – edwardmlyte 2011-01-25 16:21:10

0

规范点击进入提交按钮:

$(":input").bind("click keypress", function(evt) { 
    var keyCode = evt.which || evt.keyCode; 
    var sender = evt.target;     
    if (keyCode == 13 || sender.type == "submit") {       
     evt.preventDefault(); 
     // add your validations 
    } 
    // and submit the form 
} 
-1
var atleast = 1; 
function validate() { 
    debugger; 
    var CHK = document.getElementById("<%=chk1"); 
    var checkbox = document.getElementsByTagName("input"); 
    var counter = 0; 
    for (var i = 0; i < checkbox.length; i++) { 
     if (checkbox[i].checked) { 
      counter++; 
     } 
    } 
    if (atleast > counter) { 
     alert("Please select atleast " + atleast + " employee "); 
     return false; 
    } 
    return true; 
} 

<button type="submit" name="Initiate" value="Initiate" on click="return validate()" id=" initiate"></button>