2011-01-25 10 views
9

मुझे यह कोड मिला है, लेकिन यह सच नहीं लगता है। अलर्ट हमेशा दिखाता है। किसी भी विचार (एक varbox बनाने की आवश्यकता के बिना जिसमें एक चेकबॉक्स को स्टोर करने के लिए चुना गया है क्योंकि यह थोड़ा सा हैकी लगता है)।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

+0

मैं हाल ही में एक मुद्दे पर आया जहां e.preventDefault() फ़ायरफ़ॉक्स के साथ काम नहीं करता है। कुछ शोध के साथ, मैंने पाया कि सच या गलत लौटने से वही काम होगा और अधिक व्यापक रूप से स्वीकार किया जाएगा। मैंने इस दृष्टिकोण को दर्शाने के लिए अपना जवाब बदल दिया है। – Josh

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

3

बस इंगित करने के लिए, आप आईडी संदर्भ #form का उपयोग कर रहे हैं। क्या आपका मतलब सिर्फ सभी रूपों का संदर्भ देना था, या क्या फॉर्म में आईडी form है?

+0

इसमें एक अलग आईडी है, जो मैं वास्तव में संदर्भित कर रहा हूं। मैंने बस इसे सरल बनाने के लिए बदल दिया। – edwardmlyte

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> 
+0

कृपया समीक्षा करें [एक अच्छा उत्तर कैसे लिखें] (http://stackoverflow.com/help/how-to-answer)। कृपया कुछ संदर्भ जोड़ें और समझाएं कि आपका उत्तर एक व्यक्ति को क्यों सुनना चाहिए। –

संबंधित मुद्दे