2010-07-29 17 views
7

Ich bin mit einem Problem mit jQuery Validate stecken. Die Sache ist, ich habe ein paar Textfelder mit ihren maxlength Attribute gesetzt. Obwohl sie nicht benötigt werden, können sie immer noch nicht validiert werden, wenn sie leer oder leer sind.Texteingaben mit maxlength nicht validieren mit jQuery Validieren

Beispiel HTML:

<input type="textbox" id="tbx1" maxlength="100" value="" />

Dann $('#tbx1').valid() kehrt false. Sollte es nicht stattdessen true zurückgeben? Gibt es bekannte Problemumgehungen dafür?

Oh, und hinzufügen $('#myform').validate({ ignore: '#tbx1' }); funktioniert nicht ganz für mich, weil ich ASP.NET-Steuerelemente mit ihren automatischen IDs verwenden. Ich weiß, dass ich entweder die Client-ID des Steuerelements oder etwas wie IDOverride von Wilco verwenden kann, aber das ist einfach nicht das, was ich bevorzuge.

Also, irgendjemand? Vielen Dank!

+0

ist das Textfeld ein erforderliches Feld? Ich denke, das Plugin validiert Whitespace, also wenn das Feld leer ist oder nur Leerzeichen benötigt, wird es nicht validiert. – JKirchartz

+0

@JKirchartz das ist der Punkt. Das Feld ist nicht erforderlich. Ich weiß nicht, ob es ein Fehler oder ein Design ist, aber ich würde gerne einen Workaround dafür finden – rdumont

+0

Das muss ein Fehler sein. Ich leide mit der gleichen Sache. Sie haben ein Feld, das nicht erforderlich ist, aber geben Sie einfach eine maxlength und plötzlich das Jquery validate-Plugin denkt, es schlägt fehl Validierung. 100% Fehler. Das andere Tell-Zeichen ist, dass es nicht einmal einen Fehler für das Feld verursacht. Da ist definitiv etwas kaputt. Frustrierend, weil ich maximale Längenlimits auf meine Felder setzen muss! – Aaron

Antwort

0

Zunächst gehe ich davon aus, dass die Eingabe ein "name" -Attribut hat und in Ihrem Beispiel einfach nicht angezeigt wird? Wenn nicht, versuchen Sie das und es kann das Problem beheben.

Zweitens, haben Sie versucht, das Feld explizit so festzulegen, dass es nicht benötigt wird, aber eine maximale Länge im Validator-Objekt hat? Zum Beispiel:

var rules = { 
    'txtbx1': { 
    required: false, 
    maxlength: '100' 
    } 
}; 

$('#formId').validate({rules:rules}); 
+0

Vielen Dank für Ihre Antwort, Philip, aber Das löst das Problem nicht. Ich hatte diese Frage eigentlich vergessen, da sie einstimmig als Bug deklariert wurde. Meine Eingabe hatte kein Namensattribut, da sie in diesem Kontext nicht benötigt wurde. Wie ich in der Frage gesagt habe, war ich auf der Suche nach einer Lösung, die '$ ('# formId') nicht benötigt. Validate (...);' – rdumont

3

Ran in dieses Problem selbst auf einigen komplexen Formen ich schreibe ...

Meine Lösung ist nur meine eigene maxlength Methode zu schaffen, dass ich ‚maxLen‘, die fast genau funktioniert wie die Standardmethode nur unter einem anderen Namen. Fügen Sie dies einfach über Ihren Haupt-Validierungsaufruf ein ($ ("# mainform"). Validate ({}); oder wie auch immer Ihre Form aufgerufen wird).

//Custom Max Length Validation 
jQuery.validator.addMethod("maxLen", function (value, element, param) { 
    //console.log('element= ' + $(element).attr('name') + ' param= ' + param) 
    if ($(element).val().length > param) { 
     return false; 
    } else { 
     return true; 
    } 
}, "You have reached the maximum number of characters allowed for this field."); 

Sobald Sie getan haben, dass Sie die Regel wie so hinzufügen:

rules: { 
     Message: { 
      required: false, 
      maxLen: 200 
     } 
} 
18

Dies scheint ein Fehler in diesem Plugin zu sein. Wenn es durch Ersetzen der Methode durch eine benutzerdefinierte Implementierung mit dem folgenden Code behoben:

$.validator.addMethod("maxlength", function (value, element, len) { 
    return value == "" || value.length <= len; 
}); 
+1

Dies funktionierte besser für mich, als einen neuen Namen für meine zu setzen neue Methode. Ich hatte das maxlength-Attribut auf das Eingabefeld gesetzt, ich hatte nicht versucht, dagegen zu validieren. Auf einer Ebene habe ich keine Notwendigkeit, dagegen zu validieren - der Browser stellt sicher, dass Sie nicht mehr als die angegebene Anzahl von Zeichen hinzufügen können, sodass ich wirklich nicht sehen kann, wie die Validierung fehlschlagen könnte. Aber es ist kein Schaden bei der Validierung, solange die Validierung funktioniert. :) – Adam

+1

DANKE !! dieser Bug kostete mich ein paar Stunden! es ist mir unbegreiflich, wie das nach 2 Jahren immer noch ein Problem sein kann – black666

+0

Dies ist nützlich, da die "maxlength" Prüfung des Browsers nicht immer Newline berücksichtigt. Wie beschrieben [hier] (http://stackoverflow.com/questions/10030921/chrome-counts-characters-wrong-in-textarea-with-maxlength-attribute). – Peter