2012-12-17 13 views
15

Ich benutze die aktuelle Version von jQuery (1.8.3) und die neueste Version von jQuery validate (1.10.0), und es scheint, dass im Internet Explorer 8, jquery validate überprüft alle Eingaben auf dem zu validierenden Formular, nicht nur diejenigen mit definierten Regeln. Es funktioniert gut in anderen Browsern (IE9 +, FF, Chrome), und es funktioniert gut, wenn ich jQuery validate 1.9.0 verwenden. HierjQuery Validieren Plugin v1.10 Validierung (erfordert) alle Eingaben in IE8

ist ein Beispiel, das das Problem veranschaulicht:

<!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> 

In IE8, der „bestanden Validierung“ Alarm wird nicht ausgelöst, und das optionale Feld wird markiert, wie erforderlich.

Wenn ich ausdrücklich das optionale Feld markieren als nicht erforderlich ist, ist es richtig:

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

aber es ist sicherlich nicht optimal zu haben jedes Eingabeelement zu markieren, die nicht explizit als optional erforderlich ist, und dass war nie eine vorherige Anforderung, soweit ich weiß.

Ich weiß, dass es Probleme mit früheren Versionen von jquery und jquery validate gab, aber sie wurden angeblich mit jQuery validiert 1.8.1 behoben - Ich rate dieses Problem, da es mit den neuesten Versionen von Jquery und der scheint Plugin prüfen

UPDATE:

So scheint das Problem nur selbst zu manifestieren, wenn die F12-Entwicklertools Internet Explorer mit IE8 Verhalten zu emulieren. Basierend auf dem Kommentar, der darauf hinweist, dass es in IE8 kein tatsächliches Problem mit dem Beispiel gab, baute ich eine vollständige Windows-VM mit einer echten Internet Explorer 8-Installation auf, und tatsächlich gab es kein Problem. Obwohl es offensichtlich Unterschiede zwischen einem Emulator und dem echten Ding gibt, hatte ich noch nie zuvor ein solches Problem mit der JavaScript-Emulation gesehen, und wurde durch die Tatsache verursacht, dass es plötzlich mit jQuery Validation 1.10 auftrat.

Da es nur ein Problem mit der Emulation ist, nicht das echte Ding, gibt es hier nichts zu lösen; und ich hätte offenbaren sollen, dass es in erster Linie über den Emulator ging ... aber vielleicht wird jemand anderes in dieselbe Falle fallen und das wird eine nützliche Referenz sein.

+0

Code für mich in IE8 http://jsfiddle.net/BGDfr/1/ – charlietfl

+1

funktioniert gut nicht sicher, warum Sie mit der Schaltfläche "send button click" zum Aufruf von 'form()' verwenden, könnte die Verwendung von 'submitHandler' Callback insted – charlietfl

+1

Was @charlietf sagte ich. Das 'validate()' Plugin hat bereits einen 'submitHandler:' dafür eingebaut. Wenn Sie Ihren eigenen Klick-Handler verwenden, initialisieren Sie das Plugin unnötigerweise neu auf dem Formular. Ich habe viele Situationen gesehen, in denen dies alle Arten von seltsamen Problemen verursacht, wie zweimaliges Klicken auf den Knopf usw. – Sparky

Antwort

0

Versuchen Sie stattdessen ...

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

Es scheint keinen Unterschied zu machen, ob submitHandler verwendet wird oder nicht - es schlägt im Emulator gleichermaßen fehl und ist in einem echten IE8 gleichermaßen erfolgreich. Ich folge nicht dem Punkt, das Plugin neu zu initialisieren, wenn Sie submitHandler nicht benutzen (der Punkt von Ihrem Kommentar oben). In jedem Fall, mein "tatsächlicher" Fall reicht das Formular nicht ein - ich muss nur seine Gültigkeit testen, bevor ich eine andere Aktion unternehme ... also denke ich, dass submitHandler nicht die richtige Bequemlichkeitsmethode ist. –

+0

@KentMcNeill, Wenn Sie nur die Gültigkeit des Formulars testen müssen, ist das '.valid()' Methode für. 'if (form.valid())', usw. Natürlich, wenn Sie die Gültigkeit testen, wenn Sie auf die Schaltfläche 'submit' klicken, dann ist 'submitHandler:' dafür da, da sie nur bei Gültigkeit ausgelöst wird. Und jedes Mal, wenn Sie '.validate()' aufrufen, initialisieren Sie die Validierung auf dem Formular ... wieder, wie ich bereits erklärt habe, habe ich viele seltsame Probleme gesehen, die hier durch diese schlechte Praxis verursacht wurden. Suchen Sie einfach meine geposteten/akzeptierten Antworten, um mindestens ein halbes Dutzend zu sehen. – Sparky

Verwandte Themen