2011-01-25 7 views
9

Tôi có mã này, nhưng dường như mã này không trả về đúng sự thật. Cảnh báo luôn xuất hiện. Bất kỳ suy nghĩ (mà không cần phải tạo một var trong đó để lưu trữ một hộp kiểm đã được chọn như là chỉ có vẻ một chút hacky).Gửi biểu mẫu dừng Jquery trừ khi hộp kiểm được chọn

Cảm ơn.

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

Trả lời

17

Bạn không cần thực hiện vòng lặp để xác định xem hộp kiểm có được chọn hay không. Bộ chọn :checked sẽ lọc tất cả các bộ lọc không được chọn. Sau đó, bạn có thể sử dụng $.length để nhận được tổng số đầu vào đã chọn.

$("#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; 
}); 

Bên cạnh đó, sử dụng phương pháp tiếp cận của bạn, một sự thay đổi nhỏ nên làm cho công việc này

$("#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; 
}); 

Tôi nghĩ rằng bạn có thể chỉ đơn giản là thiếu $() xung quanh this

+0

Cảm ơn. Một giải pháp sạch đẹp. Tôi đã đi cho phiên bản của riêng bạn vì nó có vẻ dễ đọc hơn. – edwardmlyte

+0

Tôi gặp một vấn đề gần đây, nơi e.preventDefault() không hoạt động với Firefox. Với một số nghiên cứu, tôi thấy rằng việc trả lại đúng hay sai sẽ làm điều tương tự và được chấp nhận rộng rãi hơn. Tôi đã thay đổi câu trả lời của mình để phản ánh cách tiếp cận này. – Josh

0

Ví dụ về kiểm tra số lượng checboxes kiểm tra ...

<script> 

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

</script> 

Trên "$ (" đầu vào: kiểm tra ")" trả về mảng các hạng mục kiểm tra ... Bạn có thể kiểm tra " độ dài "của mảng này là> 0.

+0

Dường như một chút dư thừa để thực hiện việc này nếu tôi đã lặp lại mảng với jquery. Nhưng tôi nhận được quan điểm của bạn, tôi đã hy vọng tôi có thể tiếp tục gửi nếu ít nhất một được kiểm tra. – edwardmlyte

3

Chỉ để chỉ ra, bạn đang sử dụng tham chiếu id #form. Ý của bạn là chỉ đề cập đến tất cả các biểu mẫu hoặc biểu mẫu có id là form?

+0

Nó có một id khác, đó là những gì tôi thực sự tham khảo. Tôi chỉ thay đổi nó để đơn giản hóa. – edwardmlyte

0

Mã cho nhấp chuột và nhập vào nút gửi :

$(":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> 
+0

Vui lòng xem lại [cách viết câu trả lời hay] (http://stackoverflow.com/help/how-to-answer). Xin vui lòng thêm một số tài liệu tham khảo và giải thích tại sao câu trả lời của bạn là một trong những người nên lắng nghe. –