2012-12-17 14 views
15

में सभी इनपुट को सत्यापित करने (आवश्यक) की आवश्यकता है। मैं jQuery (1.8.3) का वर्तमान संस्करण और jQuery मान्य (1.10.0) का नवीनतम संस्करण उपयोग कर रहा हूं, और ऐसा लगता है कि इंटरनेट में एक्सप्लोरर 8, jQuery सत्यापन मान्य रूप से परिभाषित किए गए फॉर्म पर सभी इनपुट को मान्य कर रहा है, न केवल परिभाषित नियमों वाले। यह अन्य ब्राउज़रों (आईई 9 +, एफएफ, क्रोम) में ठीक काम करता है, और अगर मैं jQuery का उपयोग 1.9.0 का उपयोग करता हूं तो यह ठीक काम करता है।jQuery मान्य प्लगइन v1.10 IE8

यहाँ एक उदाहरण है कि इस मुद्दे को दर्शाता है:

<!DOCTYPE html> 

<html> 
<head> 
    <title>IE8 + jQuery Validate 1.10 Test</title> 
    <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script> 
    <script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js'></script> 
</head> 
<body> 
    <div> 
     <form id="my-form"> 
      <label for="my-required-field">required:</label> 
      <input id="my-required-field" type="text" name="reqField" /> 
      <label for="my-optional-field">optional:</label> 
      <input id="my-optional-field" type="text" name="optField" /> 
      <input id="wh-submit-button" type="submit" value="submit" /> 
     </form> 
    </div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 

      var form = $("#my-form"); 
      var validator = form.validate({ 
       rules: { 
        "reqField": { required: true } 
       }, 
       messages: { 
        "reqField": { required: "this field is <i>actually</i> required" } 
       } 
      }); 

      $("#wh-submit-button").click(function() { 
       if (validator.form()) { 
        alert('passed validation'); 
       } 
      }); 
     }); 
    </script> 
</body> 
</html> 

IE8 में, "पारित कर दिया सत्यापन" चेतावनी सक्रिय नहीं होगा, और वैकल्पिक फ़ील्ड के रूप में आवश्यक चिह्नित किया जाएगा।

मैं स्पष्ट रूप से वैकल्पिक फ़ील्ड के रूप में की आवश्यकता नहीं चिह्नित करते हैं, इसे सही ढंग से काम करता है:

rules: { 
    "reqField": { required: true }, 
    "optField": { required: false } 
} 

हालांकि, यह निश्चित रूप से हर इनपुट तत्व है कि वैकल्पिक रूप स्पष्ट रूप से की आवश्यकता नहीं है चिह्नित करने के लिए है करने के लिए करने से इनकी है, और है कि जहां तक ​​मुझे पता है, पिछली आवश्यकता कभी नहीं रही है।

मुझे पता है कि jquery और jquery के पुराने संस्करणों के साथ समस्याएं थीं, लेकिन वे स्पष्ट रूप से jQuery मान्य 1.8.1 के साथ हल किए गए थे - मैं इस मुद्दे को उठा रहा हूं क्योंकि यह jquery के नवीनतम संस्करणों के साथ प्रतीत होता है और प्लगइन मान्य करें।

अद्यतन:

तो, समस्या केवल प्रकट होता है जब इंटरनेट एक्सप्लोरर F12 डेवलपर उपकरण का उपयोग कर IE8 व्यवहार का अनुकरण करने के लिए खुद को प्रकट करने के लिए। टिप्पणी के आधार पर सुझाव दिया गया है कि आईई 8 में दिए गए नमूने के साथ कोई वास्तविक समस्या नहीं थी, मैंने एक सच्चे इंटरनेट एक्सप्लोरर 8 इंस्टॉलेशन के साथ एक पूर्ण विंडोज वीएम बनाया, और वास्तव में, कोई समस्या नहीं थी। यद्यपि एक एमुलेटर और असली चीज़ के बीच स्पष्ट रूप से मतभेद हैं, लेकिन मैंने पहले कभी जावास्क्रिप्ट अनुकरण के साथ ऐसा कोई मुद्दा नहीं देखा था, और इस तथ्य से फेंक दिया गया कि यह अचानक jQuery सत्यापन 1.10 के साथ हो रहा है।

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

+0

कोड IE8 http://jsfiddle.net/BGDfr/1/ – charlietfl

+1

में मेरे लिए ठीक काम करता है की कोशिश करो सुनिश्चित नहीं है कि आप सबमिट बटन का उपयोग क्यों करते हैं 'फॉर्म()' कॉल करने के लिए हैंडलर पर क्लिक करें 'submitHandler' कॉलबैक का उपयोग करने पर विचार कर सकते हैं – charlietfl

+1

क्या @charlietf एल ने कहा। 'Validate() 'प्लगइन में पहले से ही' submitHandler: 'बनाया गया है। अपने स्वयं के क्लिक हैंडलर का उपयोग करके, आप फॉर्म पर प्लगइन को अनावश्यक रूप से पुन: प्रारंभ कर रहे हैं। मैंने कई परिस्थितियों को देखा है जहां यह सभी प्रकार के अजीब मुद्दों का कारण बनता है जैसे कि बटन दो बार क्लिक करना आदि। – Sparky

उत्तर

0

इस बजाय ...

jsFiddle DEMO using built-in jQuery 1.8.2

jsFiddle DEMO using jQuery 1.8.3

$(document).ready(function() { 

    var form = $("#my-form"); 
    var validator = form.validate({ 
     rules: { 
      "reqField": { 
       required: true 
      } 
     }, 
     messages: { 
      "reqField": { 
       required: "this field is <i>actually</i> required" 
      } 
     }, 
     submitHandler: function(form) { 
      alert('passed validation'); 
      // form.submit(); 
     } 
    }); 

});​ 
+0

ऐसा कोई फर्क नहीं पड़ता कि सबमिट करें या नहीं सबमिट करें हैंडलर का उपयोग किया जाता है - यह एमुलेटर में समान रूप से विफल रहता है, और एक वास्तविक IE8 में समान रूप से सफल होता है। सबमिटहोंडलर (उपरोक्त आपकी टिप्पणी से बिंदु) का उपयोग नहीं करते समय मैं प्लगइन को फिर से शुरू करने के बिंदु का पालन नहीं करता हूं। किसी भी मामले में, मेरा "वास्तविक" मामला फॉर्म सबमिट नहीं करता है - मुझे बस एक और कार्रवाई करने से पहले इसकी वैधता का परीक्षण करने की आवश्यकता है ... इसलिए, मुझे लगता है कि सबमिटहैंडलर बिल्कुल सही सुविधा विधि नहीं है। –

+0

@KentMcNeill, अगर आपको केवल फॉर्म की वैधता का परीक्षण करने की आवश्यकता है, तो यही है। 'Valid() 'विधि है। 'if (form.valid()), आदि। बेशक, यदि आप वास्तविक 'सबमिट' बटन पर क्लिक करने के लिए वैधता का परीक्षण कर रहे हैं, तो यही है 'सबमिट करेंडलर:' के लिए है, क्योंकि यह केवल वैधता पर ही आग लगती है। और हर बार जब आप 'validate()' कहते हैं, तो आप फॉर्म पर सत्यापन को फिर से शुरू करते हैं ... फिर, जैसा कि मैंने समझाया है, मैंने यहां बताया है कि इस खराब अभ्यास के कारण यहां बहुत सारे अजीब मुद्दे सामने आए हैं। कम से कम आधा दर्जन देखने के लिए बस मेरे पोस्ट/स्वीकृत उत्तरों की खोज करें। – Sparky