2014-06-27 5 views
11

मेरे पास लगभग 50 फ़ील्ड और दो सबमिट बटन, "सेव" और "सेव & सबमिट करें" के साथ एक फॉर्म है। यदि उपयोगकर्ता "सहेजा" पर क्लिक करता है, तो केवल कुछ मान मान्य करें, उदाहरण के लिए। फ़ील्ड 1, फ़ील्ड 2। जब उपयोगकर्ता "& सबमिट करें" बटन पर क्लिक करता है, तो उसे सभी 50 फ़ील्ड मान्य करना होगा और जमा करना होगा।दो सबमिट बटन के साथ jQuery सत्यापन प्लगइन?

<form id="myform"> 
    <input type="text" name="field1" /> 
    <br/> 
    <input type="text" name="field2" /> 
    <br/> 
    <input type="text" name="field3" /> 
    <br/> 
    <input type="text" name="field4" /> 
    <br/> 
    <input type="submit" id="button1" value="Save" /> 
    <input type="submit" id="button2" value="Submit" /> 
</form> 


$(document).ready(function() { 

    $('#button1').click(function(){   
     $("#myform").validate({    
      rules: { 
       field1: { 
        required: true       
       }, 
       field2: { 
        required: true       
       } 
      }, 
      submitHandler: function (form) { // for demo  
       alert("data saved"); 
      } 
     }); 
    }); 

    $('#button2').click(function(){ 
     $("#myform").validate({    
      rules: { 
       field1: { 
        required: true       
       }, 
       field2: { 
        required: true       
       }, 
       field3: { 
        required: true       
       }, 
       field4: { 
        required: true       
       } 
      }, 
      submitHandler: function (form) { // for demo 
       alert("data submited"); 
      } 
     }); 
    }); 

}); 

मैं इसके लिए jsfiddle बनाया है: example test

+2

आपका प्रश्न क्या है? कृपया एक कोड लिंक के रूप में, यहां अपना कोड पोस्ट करें। – Barmar

+0

'validate' को फ़ॉर्म में एक बार लागू करने के लिए डिज़ाइन किया गया है। जो भी बटन आप पहले दबाते हैं वह तब से सत्यापन को सेट कर रहा है। आपको फिर से 'वैध' लागू करने से पहले सभी फ़ील्ड से मौजूदा सत्यापन को कैसे पट्टी करना है, यह जानने की आवश्यकता होगी। –

+0

@ बाड़ार जैसा कि मैंने कहा था कि मेरे पास 50 फ़ील्ड हैं, मैं इसे अपना पूरा कोड पोस्ट करता हूं, यह बहुत लॉग प्रश्न होगा। इस सवाल को वोट करने का कोई मतलब नहीं है। जेएसफ़िल्ड पर मैंने जो भी परीक्षण किया है। –

उत्तर

23

आपका कोड ...

$('#button1').click(function(){    
    $("#myform").validate({ 
     .... 
    });    
}); 

$('#button2').click(function(){ 
    $("#myform").validate({ 
     .... 
    }); 
}); 

आप बिल्कुल ऐसा नहीं कर सकते:

1) आप .validate() कॉल नहीं कर सकते एक ही form पर एक से अधिक विधि। किसी भी बाद की कॉल हमेशा अनदेखा कर रहे हैं।

2) आपको .validate() विधि click हैंडलर के अंदर नहीं डालना चाहिए। .validate() विधि प्रारंभिक प्लगइन की विधि है और केवल एक DOM तैयार ईवेंट हैंडलर के भीतर नामक कहलाता है। उचित प्रारंभिक के बाद, सबमिट बटन क्लिक प्लगइन द्वारा स्वचालित रूप से कैप्चर किया जाता है।


HTML मार्कअप और क्लिक करें हैंडलर:

इस प्लग भी स्वत: ही किसी input type="submit" और button type="submit" तत्वों के क्लिक कब्जा और शुरू की मान्यता/प्रस्तुत।

इसलिए यदि आपको दो अलग-अलग बटनों के लिए क्या होता है, तो आपको अपने बटन को input type="button" या button type="button" तत्वों में बदलने की आवश्यकता है।

फिर आप click() हैंडलर का उपयोग .rules() विधियों के साथ नियमों को गतिशील रूप से बदलने के लिए कर सकते हैं, जिसके अनुसार बटन क्लिक किया गया था। the .rules() methods दस्तावेज देखें।

प्रोग्रामेटिक रूप से सबमिट करने के लिए .submit() का उपयोग करें। दूसरे शब्दों में, यह एक सत्यापन परीक्षण ट्रिगर करेगा और फॉर्म को वैध रूप से सबमिट करने का प्रयास करेगा ... जैसा कि आपके पास submit बटन था।

प्रोग्राम का परीक्षण करने के लिए .valid() का उपयोग करें। दूसरे शब्दों में, यह एक सत्यापन परीक्षण ट्रिगर करेगा लेकिन अगर मैं वैध फॉर्म जमा नहीं करूंगा।


उदाहरण:

$(document).ready(function() { 

    $('#myform').validate({ // initialize the plugin on your form 
     // options, rules and/or callbacks 
    }); 

    // IMPORTANT: buttons are NOT type="submit" 

    $('#button1').on('click', function(){ // capture the click   
     $('#myfield').rules('add', { // dynamically declare the rules 
      required: true, 
      email: true 
     }); 
     $('#myOtherField').rules('remove'); // remove the other rules. 
     // another '.rules()' call, etc. 
     $('#myform').valid(); // trigger the validation & do NOT submit   
    }); 

    $('#button2').on('click', function(){ // capture the click 
     $('#myOtherField').rules('add', { // dynamically declare the rules 
      required: true, 
      digits: true 
     }); 
     $('#myfield').rules('remove'); // remove the other rules. 
     // another '.rules()' call, etc. 
     $('#myform').submit(); // trigger the validation & submit  
    }); 

}); 

कार्य डेमो: http://jsfiddle.net/Kt93M/

डेमो इन सिद्धांतों को लागू के साथ बस your original jsFiddle है।

+1

सहायता के लिए आपको बहुत बहुत धन्यवाद। –

+0

। Validate() –

+1

के उपयोग पर विस्तृत स्पष्टीकरण के लिए बहुत बहुत धन्यवाद: आप सबमिट बटन का उपयोग कर सकते हैं, उदाहरण के लिए, ताकि सर्वर जानता है कि किस पर क्लिक किया गया था। यह एक और घोषणात्मक समाधान भी है: jQuery.validator.addClassRules() का उपयोग करें, क्लिक के जवाब में एक निश्चित वर्ग को जोड़ें या हटाएं। यहां @ स्पार्की की पहेली अपडेट की गई है: http://jsfiddle.net/s6v45gka/1 –

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