2010-10-08 20 views
5

मैं निम्नलिखित करने का प्रयास कर रहा हूं: मुझे एक ऐसा फॉर्म मिला है जो jQuery सत्यापन प्लगइन के साथ मान्य है।jQuery सत्यापन: एक निश्चित नियम द्वारा ट्रिगर किया गया कॉलबैक?

  var validator = $("#myForm").validate({ 
       rules: { 
        emailForRequest: { 
         required: true, 
         email: true, 
         remote: "'emailcheck.php" 
        } 
       } , 
... 

अब, जब नियमों में से एक टूटी हुई है, अधिक सुदूर नियम ठीक है, मैं कुछ अतिरिक्त कोड ट्रिगर करना चाहते हैं: वहाँ एक क्षेत्र है जो नियमों के एक जोड़े है। इसलिए, यदि रिमोट नियम एक त्रुटि देता है और यह त्रुटि त्रुटि ईमेलफॉररवेस्ट फ़ील्ड के बगल में दिखाई देती है, तो मुझे कॉलबैक की आवश्यकता होती है जो पृष्ठभूमि में कुछ अन्य चीजें करता है।

संक्षेप में: क्या मैं देख सकता हूं कि कौन सा नियम त्रुटि को ट्रिगर करता है, इसे कोड-वार का मतलब है, और इसे अतिरिक्त फ़ंक्शन के निष्पादन को संलग्न करें?


संपादित ठीक है, लियाम के जवाब के लिए धन्यवाद और मैनुअल का एक बेहतर पढ़ने मैं इस के लिए आया था:

 rules: { 
      emailForRequest: { 
       required: true, 
       email: true, 
       remote: { 
        url: "'emailcheck.php" , 
        type: "post" , 
        complete: function(data){ 
         if(data.responseText != "true") { 
          alert("Sorry mate, this email address was registered but never activated!"); 
         } 
        } 
       } 
      } 
     } , ... 

लेकिन एक समस्या बनी हुई है। emailcheck.php स्क्रिप्ट 3 अलग-अलग परिणाम लौटा सकती है जिनमें से एक सत्य है और अन्य 2 भाषा निर्भर हैं। इसलिए मैं एक जेसन ऑब्जेक्ट को त्रुटि प्रकार (सभी भाषाओं में समान) के लिए एक var के साथ प्रतिक्रिया और संदेश (अनुवादित) के साथ एक var के रूप में भेजना चाहता हूं। तो, मेरे पूरे कार्य में मैं त्रुटि प्रकार पर एक जांच कर सकता हूं और उसके अनुसार जवाब दे सकता हूं। काफी आसान है, सिवाय इसके कि यह मेरे क्षेत्र के बगल में दिखाई देने वाली सत्यापन मानक त्रुटि को खराब कर देगा और मुझे अभी तक इसका समाधान नहीं मिला है।

+0

मुझे भी इसका समाधान देखना अच्छा लगेगा! – Patricia

+0

क्या आप हमें बता सकते हैं कि आपको उन्नत निर्देश कहां मिले, ईमेलफोरक्व्वेस्ट विकल्प इत्यादि का विवरण –

+0

अरे लिआम, निश्चित चीज़ और आपने मुझे रास्ते से सही रास्ते पर सेट किया! यहाँ URL जहाँ मैं निर्देशों पाया है: http://docs.jquery.com/Plugins/Validation – Peter

उत्तर

0

फ्रीकॉने के लिए धन्यवाद और एक उपसर्ग का उनका विचार मैं एक व्यावहारिक समाधान में आया था। मैं काम करने योग्य कहता हूं, क्योंकि मैं इसकी शुद्धता से बहुत खुश नहीं हूं। जैसा कि मुझे नहीं पता कि वही होता है जहां वैधता में और डेटा के साथ टिंकरिंग होता है। एजेक्स कॉल की सफलता और सफलता की कार्यक्षमता ने वैधता के सामान्य काम को बाधित कर दिया, मैं "छिपे हुए" उपसर्ग के साथ निम्नलिखित समाधान में आया:

var validator = $("#myForm").validate({ 
       rules: { 
        emailForRequest: { 
         required: true, 
         email: true, 
         remote: { 
          url: "emailcheck.php" , 
          type: "post" , 
          complete: function(data){ 
           if(data.responseText != true) { 
            if(data.responseText.search(/validationErrorTag/) > 0 && 
             data.responseText.search(/inactive/) > 0) { 
             inactiveFunctionality(); 
            } 
           } 
          } 
         } 
        } 
       } ,... 

ईमेल चेक के दौरान।php एक json सच इनकोडिंग लौटाता है यदि सब कुछ बाहर की जाँच करता है या json इनकोडिंग

<span class="validationErrorTag">inactive</span>This address is not yet activated. 

अंत की तरह त्रुटि संदेश, मैं अपने सीएसएस फ़ाइल में एक प्रविष्टि है सुनिश्चित करें कि उपसर्ग दिखाई नहीं करता है बनाने के लिए:

.validationErrorTag { 
    display: none; 
} 

जैसा कि मैंने कहा, यह काम करता है और मैं इसे अभी उपयोग करने जा रहा हूं, लेकिन त्रुटि संदेश को पहचानने के लिए छिपे हुए HTML उपसर्गों के साथ काम करना मेरे लिए थोड़ा कच्चा लगता है। इसलिए, अगर कोई बेहतर समाधान जानता है, तो कृपया मुझे बताएं।

1

अब मैं मैनुअल के माध्यम से जाने के लिए उचित समय मिला है, कोशिश इस

var validator = $("#myForm").validate({ 
      rules: 
       { 
       emailForRequest: 
       { 
        required: true, 
        email: true, 
        remote: "emailcheck.php" 
       } 
      }, 
      messages: 
      { 
       emailForRequest: 
       { 
       remote: jQuery.format("{0}") 
       } 
      } 

     }); 
+0

अजीब, आपका उत्तर एक सेकंड के लिए चला गया था, और अब मैं इसे फिर से एक्सेस कर सकता हूं। यह देखने के लिए कि अब तक मुझे क्या मिला है, मेरे मूल प्रश्न का संपादन देखें। – Peter

+0

मैंने अपना जवाब संपादित किया है, जो चाल चलाना चाहिए। यदि आप अपने php से गलत के बारे में सच करते हैं तो यह डिफ़ॉल्ट संदेश दिखाएगा, लेकिन यदि आप एक स्ट्रिंग वापस करते हैं तो यह स्ट्रिंग दिखाएगा। –

+0

हे लाइम, त्रुटि स्ट्रिंग को वापस करने में कोई समस्या नहीं थी, यह वैधकर्ता का डिफ़ॉल्ट व्यवहार है। समस्या यह थी कि प्रक्रिया में कहीं मुझे पहचानने की आवश्यकता थी, कोड-वार, स्ट्रिंग के आधार पर कौन सी त्रुटि फेंक दी गई थी, क्योंकि स्ट्रिंग स्वयं प्रति भाषा परिवर्तनीय है। वैसे भी, मेरे साथ सोचने के लिए धन्यवाद। मुझे एक समाधान मिला जो मैं एक मिनट में एक जवाब में डाल दूंगा। – Peter

1

jquery.validate.js - लाइन 941:

success: function(response) { 
    validator.settings.messages[element.name].remote = previous.originalMessage; 
    var valid = response === true; 
    if (valid) { 
    .... 

मुझे लगता है कि आप काफी आसानी से अपनी खुद की डाल सकता है यहाँ काम करें। आपके पास दोनों प्रतिक्रिया और तत्व नाम उपलब्ध हैं, इसलिए किसी विशेष नाम वाले तत्व को लक्षित करना काफी आसान होगा। यदि आप स्क्रिप्ट को स्वयं संशोधित नहीं करना चाहते हैं (यानी इसे सीडीएन सर्वर से लोड किया जा रहा है) तो आप मूल के आधार पर अपना खुद का रिमोट सत्यापन नियम लिख सकते हैं।

इसके अलावा, AFAIK, कोई अंतर्निहित फ़ंक्शन/विधि नहीं है जो नियम के नाम को वापस कर देगी जो मान्य नहीं है।

अद्यतन

दोनों नियम और तत्व यह है कि शुरू हो रहा यह errorPlacement समारोह में यह सब संभाल करने होगा खोजने का संभावित हल:

... 
}, 
errorPlacement: function(error, element) { 
    error.insertBefore(element); // default positioning 

    if ((error == 'your error message') && (element.attr('id') == 'your_targets_id')) { 
     // your function 
    } 
}, 
... 

आशा इस मदद करता है।

+0

हे फ्रीकोन, इनपुट के लिए धन्यवाद। मैं लिआम के अर्लियर (और गायब?) के आधार पर एक समाधान के बहुत करीब हूं और आपके सुझाव के करीब है लेकिन एक अलग स्थान पर है। मेरे मूल प्रश्न के संपादन की जांच करें। – Peter

+0

कृपया मेरा अद्यतन उत्तर देखें। आप मूल रूप से त्रुटि संदेश, और उसके आईडी द्वारा तत्व द्वारा नियम की पहचान करेंगे। मैंने इसका परीक्षण नहीं किया है, लेकिन इसे काम करना चाहिए। –

+0

चीयर्स साथी!लेकिन मुझे यहां कोई समस्या है, मैं त्रुटि == 'आपका त्रुटि संदेश' का उपयोग नहीं कर सकता क्योंकि मुझे त्रुटि संदेश नहीं पता है (यह भाषा निर्भर है और हमारे ग्राहकों द्वारा परिवर्तनीय है)। लेकिन यह एक और सबसे दिलचस्प प्रक्षेपवक्र है! – Peter

6

यह सुनिश्चित नहीं है कि यह धागा अभी भी खुला है, लेकिन मैं addMethod कॉल के साथ इस समस्या को हल करने में सक्षम था और उस फॉर्म तत्व के लिए त्रुटि संदेश का ट्रैक रखने के लिए एक सरणी का उपयोग कर रहा था।

यहाँ कोड

//phone 
var phoneStatus = null; 
$.validator 
.addMethod(
    'validatePhone', 
    function() 
    { 
     $.ajax({ 
      url: /path/to/script, 
      async: false, 
      dataType: 'json', 
      data:{ formDataHere}, 
      success: function(data) 
      { 
       errorMessages['validatePhone'] = data.message; 
       phoneStatus = data.status; 
      }, 
      complete: function(){}, 
      error: function(){} 
     }); 
     return phoneStatus; 
    }, 
    function() 
    { 
     return errorMessages['validatePhone']; 
    } 
); 
+0

क्या यह तुरंत 'फोनस्टैटस' के मान को वापस नहीं करेगा और इस प्रकार सत्यापन को तोड़ देगा? – Moss

+0

कुंजी पंक्ति 'async: false' है। कॉल पूरा होने तक यह इंतजार करेगा, फिर कॉल बैक फ़ंक्शंस को संसाधित करें, और फिर 'रिटर्न फोन स्टेटस;' कथन निष्पादित किया जाएगा। –

0
var validator = $("#myForm").validate({ 
    rules: { 
     emailForRequest: { 
       required: true, 
       email: true, 
       remote: { 
        url: "emailcheck.php" , 
        type: "post" , 
        complete: function(data){ 
         if(data.responseText != true) { 
          var type = data.responseText.split('|'); 
          if(type[0]=='inactive') { 
             inactiveFunctionality(); 
// type[1] contains your message, display it using any method! e.g. $('#id').html(type[1]); or sooo! 
            } 
           } 
          } 
         } 
        } 
       } 

है * या **

आप json उपयोग कर सकते हैं! बस जेसन प्रारूप में प्रतिक्रिया पाठ भेजें और "।" के आधार पर यहां जांचें। संपत्ति का उपयोग

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