2012-07-13 9 views
33

जावास्क्रिप्ट बिट सबमिट करें। विचार है कि मैं अपने फॉर्म को अजाक्स के साथ भेजने से पहले अपने सभी इनपुट मान्य कर दूं। मैंने अब इसके कई संस्करणों की कोशिश की है, लेकिन हर बार जब मैं पूरी तरह से भर नहीं जाता हूं, तब भी मैं सबमिट करने के साथ समाप्त होता हूं। मेरे सभी इनपुट "आवश्यक" वर्ग के हैं। क्या कोई देख सकता है कि मैं क्या गलत कर रहा हूं?jQuery फार्म मान्यकरण अजाक्स से पहले

इसके अलावा, मैं कक्षा-आधारित आवश्यकताओं पर निर्भर करता हूं क्योंकि मेरे इनपुट नाम php के साथ उत्पन्न होते हैं, इसलिए मैं कभी भी यह सुनिश्चित नहीं कर सकता कि मुझे कौन सा नाम [आईडी] या इनपुट प्रकार मिलता है।

मैं प्रश्नों को दिखाता/छिपाता हूं क्योंकि मैं इसे "पृष्ठों" में जाता हूं।

<input type="button" id="next" onClick="toggleVisibility('form3')" class="next-btn"/> 

जे एस:

function toggleVisibility(newSection) 
     { 
      $(".section").not("#" + newSection).hide(); 
      $("#" + newSection).show(); 
     } 
+0

जब आप सबमिट करें, तो क्या होता गति प्रदान करने के लिए और अधिक पर्याप्त तो है? –

+0

इस समय मैं बस सभी $ key => $ मूल्य जोड़ों को प्रतिबिंबित करता हूं और वे केवल मेरी स्क्रीन पर पॉप-अप करते रहते हैं, भले ही मैं केवल 1/4 प्रश्नों को भरूं। – Tom

+0

मुझे jquery (v1.7.2) के नवीनतम संस्करण में $ .ajax के लिए वैध विकल्प के रूप में 'पहले सबमिट करें' नहीं मिला। आप jquery के नवीनतम संस्करण का उपयोग करना चाह सकते हैं। उस ने कहा, डारिन का जवाब यह है कि इसे कैसे किया जाना चाहिए। उस ने कहा, अगर आप जो भी सुझाव दे रहे हैं वह सिर्फ वह नहीं कर सकता है, तो Fliespl कोड को कोड के साथ सबमिट करने से पहले अपने पहले की अंतिम पंक्ति को प्रतिस्थापित करें। आपको 'validate() 'के वापसी मूल्य की जांच करने की आवश्यकता है और तदनुसार या तो AJAX अनुरोध के साथ आगे बढ़ें या रद्द करें। –

उत्तर

72

आप submitHandler विकल्प का उपयोग कर सकते हैं। मूल रूप से इस हैंडलर के अंदर $.ajax कॉल डालें, यानी इसे सत्यापन सेटअप तर्क के साथ उलटा करें।

$('#form').validate({ 

    ... your validation rules come here, 

    submitHandler: function(form) { 
     $.ajax({ 
      url: form.action, 
      type: form.method, 
      data: $(form).serialize(), 
      success: function(response) { 
       $('#answers').html(response); 
      }    
     }); 
    } 
}); 

jQuery.validate प्लगइन हैंडलर प्रस्तुत करता है, तो सत्यापन बीत चुका है आह्वान करेंगे।

+0

लेकिन मैं अभी भी $ .asax से पहले मान्य या चिपकाने से पहले #answers को क्रमबद्ध कर सकता हूं? – Tom

+0

कभी नहीं, सीधे सीरियलize देखा :) – Tom

+0

'# उत्तर' आपका परिणाम div है। यदि आप AJAX अनुरोध के साथ फॉर्म इनपुट फ़ील्ड मान भेजना चाहते हैं, तो '.serialize()' विधि का उपयोग करें, जैसा कि मेरे उत्तर में दिखाया गया है: 'डेटा: $ (फॉर्म) .serialize()' => सबमिट के अंदर हैंडलर। –

6

आप कर कोशिश कर सकते हैं:

if($("#form").validate()) { 
return true; 
} else { 
return false; 
} 
+0

आसान और एक आकर्षण की तरह काम किया! : * बहुत बहुत धन्यवाद ^^ – Tom

+0

ओह, मैं बहुत थक गया होगा। अभी भी काम नहीं करता है:/ – Tom

+0

मैं प्रदर्शन बदलता हूं: मेरे फॉर्म पर कोई भी नहीं, क्योंकि मैं इसे कई "पृष्ठों" में विभाजित करता हूं। सोचो कि कुछ समस्याएं पैदा हो सकती हैं? – Tom

3

मुझे लगता है कि मैं पहला रूप मान्य और अगर प्रमाणीकरण में सफल होगा, की तुलना में मैं ajax पोस्ट होगा। स्क्रिप्ट के अंत में "वापसी झूठी" जोड़ने के लिए मत भूलना।

10

सबसे पहले आपको classRules को स्पष्ट रूप से जोड़ने की आवश्यकता नहीं है क्योंकि required स्वचालित रूप से jquery.validate प्लगइन द्वारा पता चला है। तो आप इस कोड का उपयोग कर सकते हैं:

  1. फार्म पर भेजते हैं तो आप डिफ़ॉल्ट व्यवहार
  2. को रोकने यदि प्रपत्र अमान्य रोक निष्पादन है।
  3. अन्य अगर वैध AJAX अनुरोध भेजता है।

    $('#form').submit( function(e){  
    
          e.preventDefault(); 
          var $form = $(this); 
    
          // check if the input is valid 
          if(! $form.valid()) return false; 
    
          $.ajax({ 
           type: 'POST', 
           url: 'add.php', 
           data: $('#form').serialize(), 
           success: function(response) { 
            $("#answers").html(response); 
           } 
    
          }); 
         }); 
    
+0

मेरे लिए यह काम नहीं करता है या तो:/ – Tom

+0

जांचें कि क्या आपके ब्राउज़र लॉग में कोई त्रुटि है, आप किस ब्राउज़र का उपयोग करते हैं? – amd

+0

मैं Google क्रोम का उपयोग कर रहा हूं, लेकिन मुझे वहां कोई त्रुटि नहीं मिल रही है। एक बार फिर इस कोड के साथ प्रयास करने के लिए। – Tom

4

इस विशिष्ट उदाहरण सिर्फ इनपुट के लिए जाँच करेगा, लेकिन आप फिर भी यह tweak सकता है, अपने .ajax कार्य करने के लिए कुछ इस तरह करें:

beforeSend: function() {      
    $empty = $('form#yourForm').find("input").filter(function() { 
     return this.value === ""; 
    }); 
    if($empty.length) { 
     alert('You must fill out all fields in order to submit a change'); 
     return false; 
    }else{ 
     return true; 
    }; 
}, 
3

मुझे लगता है कि submitHandler jQuery मान्यता के साथ अच्छा है उपाय। कृपया इस कोड से विचार प्राप्त करें।@Darin दिमित्रोव से प्रेरित होकर

$('.calculate').validate({ 

       submitHandler: function(form) { 
        $.ajax({ 
         url: 'response.php', 
         type: 'POST', 
         data: $(form).serialize(), 
         success: function(response) { 
          $('#'+form.id+' .ht-response-data').html(response); 
         }    
        }); 
       } 
      }); 
3
> Required JS for jquery form validation 
> ## jquery-1.7.1.min.js ## 
> ## jquery.validate.min.js ## 
> ## jquery.form.js ## 

$("form#data").validate({ 
    rules: { 
     first: { 
       required: true, 
      }, 
     middle: { 
      required: true, 
     },   
     image: { 
      required: true, 
     }, 
    }, 
    messages: { 
     first: { 
       required: "Please enter first", 
      }, 
     middle: { 
      required: "Please enter middle", 
     },   
     image: { 
      required: "Please Select logo", 
     }, 
    }, 
    submitHandler: function(form) { 
     var formData = new FormData($("#image")[0]); 
     $(form).ajaxSubmit({ 
      url:"action.php", 
      type:"post", 
      success: function(data,status){ 
       alert(data); 
      } 
     }); 
    } 
}); 
+0

यह उत्तर शुरुआती लोगों के लिए स्पष्ट रूप से समझाया गया है ... धन्यवाद! लेकिन क्या यह फ़ाइल अनुलग्नक को भी मान्य करता है !! किस तरह !! –

0

फार्म देशी जावास्क्रिप्ट checkValidity समारोह HTML5 सत्यापन

$(document).ready(function() { 
    $('#urlSubmit').click(function() { 
     if($('#urlForm')[0].checkValidity()) { 
      alert("form submitting"); 
     } 
    }); 
}); 
संबंधित मुद्दे