9

Ich verwende jQuery Validation Plugin, v1.11.0,2/4/2013 mit jquery.validate.unobtrusive.js.Numerische Bereichsüberprüfung funktioniert nicht ordnungsgemäß in jquery.validate.unobtrusive.js

Ich vermute, dass ich einen Fehler der Bereichsüberprüfung für numerisches Feld konfrontiert: Validierung vergleicht Zeichenfolge Wert mit String von Min und String von Max, anstatt Anzahl der Felder mit Min-Nummer und Max-Nummer zu vergleichen.

Repro-Schritte:

Sie setzen Validierung Bereich 1-1000, folgende HTML verwenden:

<input name="Data.MaxConcurrentInstances" class="text-box single-line" id="Data_MaxConcurrentInstances" type="number" value="" data-val-number="The field Max concurrent instances must be a number." data-val="true" data-val-range-min="1" data-val-range-max="1000" data-val-range="The field Max concurrent instances must be between 1 and 1000."> 

Sie legen Testfeld Wert: 7.

Erwartete Ergebnisse: Validierung erfolgreich. Keine Fehler.

Tatsächliche Ergebnisse: Die Validierung schlägt fehl. Interner Grund: Es schlägt fehl, weil alphabetisch Zeichenfolge "7" nach Zeichenfolge "1" und "1000" geht, nicht zwischen ihnen.

Frage: Ist es dieser Fehler bekannt? Was ist die beste Problemumgehung dafür?

Antwort

7

sehe ich auch dieses Problem. Ich habe gerade bestätigt, dass das Update in JQuery Validation 1.11.1 behoben wird, indem ich meinen Code manuell aktualisiere. Das Update wurde noch nicht in den NuGET-Repositorys veröffentlicht.

Sie können das Update hier herunterladen: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Die Microsoft CDN-Adressen sind:

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js


Update vom 3. April:

Das NuGET-Paketupdate ist jetzt verfügbar. Wenn Sie über NuGET auf JQuery Validation 1.11.1 aktualisieren, wird das Problem behoben.

+0

Danke für Info. Hast du das wirklich getestet? Weil ich andere Threads gesehen habe, haben Leute gesagt, dass das vor einer Weile für frühere Versionen behoben wurde, aber das war es nicht. Gibt es auch Informationen, wann NuGet aktualisiert wird? –

+0

Hallo. Ja, ich habe es tatsächlich auf meiner Bewerbung getestet. Ich hatte viele Validierungen und alle waren kaputt. Ich ersetze einfach den JS-Dateiinhalt (der ursprünglich von NuGET installiert wurde) durch die neuere Version (kopieren und einfügen) und alle meine Seiten verhalten sich jetzt. NuGET-Paket ist jetzt bereits veröffentlicht. – Iravanchi

+0

Ich habe gerade die JQuery-Validierung im NuGet-Manager für meine Projekte aktualisiert und jetzt funktioniert die Bereichsvalidierung einwandfrei. –

1

Bisher ist die beste Abhilfe, die ich gefunden läuft Patchen Startskript:

$(document).ready(function() { 
    window.setTimeout(function() { 
     //Fixing jquery Unobtrusive validation range integer bug 
     var allRules = $.data(document.forms[0], "validator").settings.rules; 
     for (var ruleName in allRules) { 
      var rule = allRules[ruleName]; 

      if (rule.range != undefined && rule.number) 
       for (var ri = rule.range.length-1; ri >=0 ; ri--) { 
        rule.range[ri] = Number(rule.range[ri]); 
       } 
     } 
    }, 100); 
}); 
+0

Ich habe genau das gleiche Problem. Der obige Workaround funktioniert, hat aber einen kleineren Bug in der for/next-Schleife. Ersetzen Sie Zeile 9 durch: "für (var ri = rule.range.length - 1; ri> = 0; ri--) {". Ich habe aktualisiert, aber die Änderung muss durch Peer-Review genehmigt werden. – Pando

+0

Können Sie erklären, warum Sie vorschlagen, in umgekehrter Reihenfolge aufzuzählen? –

+0

Für eine bessere Leistung möchten Sie nicht die Länge des Arrays in jeder Iteration bewerten. Es gibt ein paar verschiedene Möglichkeiten, dies zu tun. Überprüfen Sie http://www.openjs.com/articles/for_loop.php – Pando

0

Einer der Behelfslösung wäre, den Bereich Methode jquery validator außer Kraft zu setzen, wie folgt:

$.validator.methods.range = function (value, element, param) { 
     return this.optional(element) || (Number(value) >= Number(param[0]) && Number(value) <= Number(param[1])); 
    } 

Der tatsächliche Code für Bereich, in dem Validator-Plug

range : function (value, element, param) { 
      return this.optional(element) || (value >= param[0] && value <= param[1]); 
     } 

On Umwandeln den String-Typs ist Wert in der value, param[0] and param[1] zu Zahl Typ mit Number(value), Number(param[0]) and Number(param[1]) ein richtiger Vergleich tritt zwischen Number und nicht zwischen String.

Verwandte Themen