2010-07-29 2 views
7

Sono bloccato con un problema utilizzando jQuery Validate. Il fatto è che ho alcune caselle di testo con il loro set di attributi maxlength. Sebbene non siano richiesti, non riescono ancora a convalidare quando vuoto o spazio vuoto.Input di testo con lunghezza massima non valida con jQuery Validate

HTML di esempio:

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

Poi, $('#tbx1').valid() rendimenti false. Non dovrebbe invece restituire true? Esistono soluzioni alternative per questo?

Oh, e l'aggiunta di $('#myform').validate({ ignore: '#tbx1' }); non funziona abbastanza per me, perché sto usando i controlli ASP.NET con i loro ID automatici. So che potrei usare l'ID del client del controllo o qualcosa come l'IDOrride di Wilco, ma questo non è esattamente ciò che preferisco.

Quindi, qualcuno? Grazie!

+0

la casella di testo è un campo obbligatorio? Penso che il plugin di validazione taglia gli spazi, quindi se la casella è vuota o solo spazi e richiesta non verrà convalidata. – JKirchartz

+0

@JKirchartz questo è il punto. il campo non è richiesto. Non so se è un bug o di progettazione, ma mi piacerebbe trovare una soluzione per questo – rdumont

+0

Questo deve essere un bug. Sto soffrendo con la stessa cosa. Hai un campo che NON è richiesto, ma semplicemente dargli una lunghezza massima e improvvisamente il plugin jquery validate pensa che fallisca la validazione. 100% bug. L'altro segnale del racconto è che non genera nemmeno un errore per il campo. Quindi qualcosa è sicuramente sballato lì dentro. Frustrante perché ho bisogno di mettere limiti di lunghezza massima sui miei campi! – Aaron

risposta

0

Innanzitutto, presumo che l'input abbia un attributo "nome" e non sia semplicemente mostrato nel tuo esempio? In caso contrario, provalo e potrebbe risolvere il problema.

In secondo luogo, si è tentato di impostare esplicitamente il campo in modo che non fosse necessario ma di avere una lunghezza massima nell'oggetto validatore? Per esempio:

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

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

Grazie per la risposta, Philip, ma questo non risolve il problema. In realtà avevo dimenticato questa domanda, poiché è stata dichiarata all'unanimità bug. Il mio input non aveva un attributo name, dal momento che non era necessario in quel contesto. Inoltre, come ho affermato nella domanda, stavo cercando una soluzione che non richiedesse '$ ('# formId'). Validate (...);' – rdumont

3

imbattuto in questo problema io stesso su alcune forme complesse che stavo scrivendo ...

La mia soluzione è solo quello di creare il mio metodo maxlength che posso 'maxLen' che funziona quasi esattamente come il metodo predefinito appena sotto un nome diverso. Basta incollarlo sopra la tua convalida principale di convalida ($ ("# mainform"). Validate ({}) o qualunque sia il tuo modulo chiamato).

//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."); 

Una volta fatto che è possibile aggiungere la regola in questo modo:

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

questo sembra essere un bug in questo plugin. Se risolto sostituendo il metodo con un'implementazione personalizzata utilizzando il seguente codice:

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

Questo ha funzionato meglio per me che impostare un nuovo nome per il mio nuovo metodo. Avevo impostato l'attributo maxlength sul campo di input, non avevo tentato di convalidarlo. Ad un livello non sento il bisogno di convalidare contro di esso - il browser garantisce che non è possibile aggiungere più del numero specificato di caratteri, quindi non vedo davvero come la convalida potrebbe fallire? Ma non c'è nulla di male nel convalidare finché dura la validazione. :) – Adam

+1

GRAZIE !! quell'insetto mi è costato poche ore! è oltre a me come questo possa ancora essere un problema dopo 2 anni – black666

+0

Questo è utile perché il controllo "maxlength" del browser non sempre tiene conto delle nuove righe. Come descritto [qui] (http://stackoverflow.com/questions/10030921/chrome-counts-characters-wrong-in-textarea-with-maxlength-attribute). – Peter