2011-01-25 105 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>