2013-08-28 2 views
7

मैं निम्नलिखित सत्यापन सेटअप के साथ एक रूप है:jQuery रिमोट के साथ कस्टम सत्यापन संदेश स्थापित करने के लिए प्रयास करें

$('#form').validate({ 
      onfocusout: false, 
      onkeyup: false, 
      onclick: false, 
      success: function(){ 
       $('#username').addClass('input-validation-confirmation'); 
      } 
     }); 
$('#username').rules("add", { 
     onfocusout: false, 
     onkeyup: false, 
     required: true, 
     email: true,      
     remote: { 
      url: function, 
      type: 'GET', 
      dataType: 'json', 
      traditional: true, 
      data: { 
       username: function() { 
        return $('#username').val(); 
       } 
      }, 
      dataFilter: function (responseString) { 
       var response = jQuery.parseJSON(responseString); 
       currentMessage = response.Message; 
       if (response.State == 0) { 
        currentMessage = currentMessage + 0; 
           return false; 
       } 
       return 'true'; 
      }, 
      beforeSend: function (response) { 
       showLoadingIndicator($('#username')); 
      }, 
      complete: function() { 
       hideLoadingIndicator($('#username')); 
      } 
     } 
}); 

क्या यह वही मान्यता तत्वों (का उपयोग किया जाता है क्रम में कुछ अन्य के साथ काम करने के लिए प्रयास कर रहा है ढांचे) दोनों त्रुटियों और सफलता के तरीकों को दिखाने के लिए।

मेरी समस्या यह है कि रिमोट सत्यापन पूरा होने से पहले मेरे नियम की सफलता विधि निकाल दी गई है। मैंने संदेश को कई तरीकों से सेट करने का प्रयास किया लेकिन कस्टम संदेश पैरामीटर सत्यापन सफलता पर नहीं कहा जाता है।

क्या किसी को रिमोट और पैटर्न सत्यापन नियमों के मिश्रण का उपयोग करते समय सफलता और त्रुटि संदेशों दोनों के लिए सत्यापन त्रुटि फ़ील्ड का उपयोग करने के अन्य तरीकों के बारे में पता है?

संपादित करें:

अब मैं समझ मैं गलत समय पर एक सफलता घटना उम्मीद कर रहा था। सत्यापन के पूरा होने के बाद मुझे एक ऐसी घटना की आवश्यकता है जिसे सबमिट नहीं किया गया है (जमा नहीं किया गया है)। क्या ऐसी कोई घटना है?

+0

मुझे लगता है आप http://jqueryvalidation.org/ उपयोग कर रहे हैं?यदि ऐसा है, तो ऐसा लगता है कि [रिमोट विधि] (http://jqueryvalidation.org/remote-method) प्रति-फ़ील्ड आधार पर है, और उस क्षेत्र का बच्चा होना चाहिए जो रिमोट चेक ट्रिगर करने जा रहा है। । । – ernie

उत्तर

5

आपका कोड ...

$('#username').rules("add", { 
    onfocusout: false, 
    onkeyup: false, 
    required: true, 
    email: true,      
    remote: { ... }, 
    messages: { ... }, 
    success: function (label) { ... } 
}); 

समस्या है कि यहाँ onfocusout, onkeyup और success "नियम" नहीं हैं। केवल व्यक्तिगत "नियम" और messages विकल्प .rules('add') विधि के अंदर रखा जा सकता है। .rules() विधि के लिए

$('#username').rules("add", { 
    required: true, 
    email: true,      
    remote: { ... }, 
    messages: { 
     remote: "custom remote message" 
    } 
}); 

दस्तावेज़ देखें: http://jqueryvalidation.org/rules

onfocusout, onkeyup और success "विकल्प" है कि केवल .validate() विधि है, जो केवल <form> तत्व से जुड़ा हुआ है के अंदर जाना है।

remote: As per the docs के लिए "कस्टम" संदेश तक, यह त्रुटि संदेश स्वचालित रूप से आपके सर्वर से लौटा संदेश होने जा रहा है ... कोई विशेष सेटअप नहीं है।


टिप्पणियों के अनुसार संपादित करें और अपडेट ओपी:

आपका कोड:

$('#form').validate({ 
     onfocusout: false, 
     onkeyup: false, 
     onclick: false, 
     success: function(){ 
      $('#username').addClass('input-validation-confirmation'); 
     } 
}); 

आप ने कहा, "फिर भी, अपडेट किए गए कोड के साथ (ऊपर देखें) मैं सफलता कभी नहीं देखना घटना। "

आपने इस फ़ॉर्म पर सभी घटनाओं को अक्षम कर दिया है। इस फ़ील्ड पर सत्यापन को ट्रिगर करने के लिए छोड़ा गया एकमात्र ईवेंट तब होता है जब सबमिट बटन क्लिक किया जाता है। वास्तव में जब क्या आप success आग लगने की उम्मीद करते हैं?

डेमो: http://jsfiddle.net/xMhvT/

दूसरे शब्दों में, submit केवल घटना एक सत्यापन परीक्षण जब आप विकलांग सभी अन्य घटनाओं है को गति प्रदान करने के लिए छोड़ दिया है।


संपादित एक और ओपी अद्यतन पर आधारित।

"अब मैं समझ मैं गलत समय पर एक सफलता घटना उम्मीद कर रहा था मैं एक घटना है कि एक बार सत्यापन पूरा कर लिया है निकाल दिया जाता है की जरूरत है ( सबमिट नहीं किया गया)। क्या ऐसी कोई घटना है? "

success एक "घटना" नहीं है। एक "घटना" एक click, blur, keyup, आदि (onkeyup, onfocusout और onclick विकल्प है कि इस प्लगइन के लिए घटनाओं को नियंत्रित कर रहे हैं)

success एक "कॉलबैक फ़ंक्शन" है। एक "कॉलबैक फ़ंक्शन" ईवेंट पर होता है।

• यदि आपको "कॉलबैक फ़ंक्शन" की आवश्यकता होती है जो फ़ील्ड सत्यापन के दौरान हर बार आग लगती है, तो आप success का उपयोग कर सकते हैं।

• यदि आपको "कॉलबैक फ़ंक्शन" की आवश्यकता होती है जो फ़ॉर्म मान्य होने पर आग लगती है, तो आप submitHandler का उपयोग कर सकते हैं। हालांकि, यह तब भी होता है जब फॉर्म जमा किया जाता है।

• यदि आप पूरे फॉर्म या एक फ़ील्ड को "परीक्षण" करना चाहते हैं तो यह देखने के लिए कि क्या यह फॉर्म सबमिट किए बिना मान्य है, तो आप .valid() "विधि" का उपयोग कर सकते हैं।

$('#username').valid(); // for one field 

// or 

$('#form').valid(); // for the whole form 

// you can also... 

if ($('#form').valid()) { 
    //do something if form is valid 
} 

यह विधि परीक्षण को आग लग जाएगी (संदेश दिखाएं) और एक बूलियन मान वापस कर देगा।

डेमो: http://jsfiddle.net/xMhvT/1/

देखें: http://jqueryvalidation.org/valid/

+0

हाँ, यह अजीब चीज है। मैं मूल रूप से वैध() फ़ंक्शन पर सफलता सेटअप था लेकिन इसे कभी भी नहीं कहा जा रहा था। मैंने इसे नियम कॉल में ले जाया क्योंकि मैं कर सकता था। वह तब हुआ जब इसे बिल्कुल बुलाया जाना शुरू हो गया। –

+0

@PaulSachs, शायद आपने 'validate() 'के भीतर कुछ अन्य त्रुटियां की हैं। 'सफलता' प्लगइन की मूल कार्यक्षमता का हिस्सा भी है। जब प्लगइन चालू हो रहा है, तो 'सफलता' अभी भी निकाल दी जाएगी चाहे आपने इसे घोषित किया हो या नहीं। अन्यथा, मुझे नहीं पता कि इस प्लगइन और इसके तरीकों का उपयोग करने के उचित तरीके को दिखाने के अलावा आपको और कैसे मदद करनी है। – Sparky

+0

@PaulSachs, 'नियम '(' विधि 'विधि के भीतर' सफलता 'डालने से प्लगइन पूरी तरह से टूट जाता है। यह पेज लोड पर फायरिंग है और जब फ़ील्ड अमान्य हैं: http://jsfiddle.net/9AfLa/ – Sparky

1

मैं इस सवाल का जवाब देने के लिए देर हो चुकी हूँ, लेकिन मैं यह दूसरों की मदद कर सकते हैं लगता है:

अपने php में

सिर्फ निम्नलिखित

जोड़ने की जरूरत
if($rows_matched==1){ 
      echo (json_encode(false)); 
     } 
     else{ 
      echo (json_encode(true)); 
     } 

और आपके जेएस कोड में फॉलोइंग लिखें: $ (फ़ंक्शन() {

$('#product_add').validate({ 
rules:{ 
    product_sku:{ 
    remote:{ 
     url:'check.php', 
     type:'POST' 
    } 
    } 
}, 
messages:{ 
    product_sku:{ 
    remote:'already in database' 
    } 
} 
}); 

});

4

इस तरह remote, dataFilter और messages मापदंडों का उपयोग करें:

var message = 'Default error message'; 

$('form').validate({ 
    rules: { 
     element1: { 
      remote: { 
       url: '/check', 
       type: 'post', 
       cache: false, 
       dataType: 'json', 
       data: { 
        element2: function() { 
         return $('.element2').val(); 
        } 
       }, 
       dataFilter: function(response) { 
        response = $.parseJSON(response); 

        if (response.status === 'success') return true; 
        else { 
         message = response.error.message; 
         return false; 
        } 
       } 
      } 
     } 
    }, 
    messages: { 
     element1: { 
      remote: function(){ return message; } 
     } 
    } 
}); 
संबंधित मुद्दे