2013-04-25 15 views
7

Ho una casella di testo per Age:IE10 convalida bug con maxlength e segnaposto sul testo

< input type = "text" id = nome "txtAge" = "txtAge" class = "testo" segnaposto = "Age (opzionale) "maxlength =" 2 ">

Facendo clic su Invia, questo input è immediatamente bordato di rosso. Non c'è nessun postback. Suppongo che IE10 creda che il client abbia effettivamente digitato "Age (facoltativo)" che è maggiore della lunghezza massima di 2.

Esiste comunque un modo per aggirare questo problema senza che l'utente debba eseguire alcuna operazione nelle impostazioni del proprio browser e senza rimuovere l'attributo maxlength?

+2

Non sembra probabile che sia questo il problema. IE10 fornisce un messaggio di errore sul campo? Fai qualche convalida personalizzata su submit? A proposito, potrebbe essere meglio se si usa type = "number" per l'età. –

+0

IE 10 aggiunge un bordo rosso 3px. Non so da dove. Ho cercato l'intera soluzione per 3px rosso solido senza risultati. Il pulsante di invio non ha alcun javascript legato ad esso. Dovrebbe postback in questo caso particolare. Durante l'utilizzo di type = numero può risolvere questo particolare problema, ho altri campi come middle initial dove placeholder = "MI" e maxlength = "1" e mostra lo stesso bordo rosso. – sapataso

+0

Puoi pubblicare una demo del problema, dato che non vedo il problema semplicemente usando il codice che hai fornito sopra? –

risposta

10

È possibile utilizzare gli attributi novalidate e formnovalidate. Vedere this link per ulteriori informazioni.

Internet Explorer 10 e Windows Store le applicazioni che utilizzano JavaScript aggiunge il nuovo supporto per i moduli HTML5, tra cui nuovi stati di type (sul elemento di input), nuovi attributi per l'elemento di input, e l'elemento di avanzamento. Questo supporto consente agli sviluppatori di fornire rapidamente e facilmente suggerimenti all'utente, convalida dell'input e feedback con una quantità minima di script.

Fonte: http://msdn.microsoft.com/en-us/library/ie/hh673544(v=vs.85).aspx

1

Ho affrontato lo stesso problema.

In questo caso, è necessario modificare la lunghezza massima su 10 in modo che non venga emessa per la lunghezza massima e impostare la lunghezza massima desiderata per la casella di testo utilizzando javascript come segue.

function setMaxLength(obj, len) { 
return (obj.value.length < len); 
} 

e chiamare questa funzione come seguire

<input type="text" id="txtAge" name="txtAge" class="text" placeholder="Age (optional)" maxlength="10" onkeypress="return setMaxLength(this,2);"> 

Questo risolverà il problema.

1

Ho avuto lo stesso problema, nel mio caso si trattava di un campo GUID, che era nascosto in quanto non era necessario visualizzarlo sullo schermo. Quindi avevo display: none e maxlength = 0. Eppure, IE stava eseguendo la convalida, il postback stava fallendo e non avevo idea del perché. Mi ci è voluto mezzo giorno per capirlo, la soluzione era impostare maxlength = 36.

+1

Stesso problema qui; grazie per il tuo post Ho appena perso un'ora a causa di una casella di testo nascosta che è stata compilata tramite script client ma con una lunghezza massima troppo piccola. Che sux è che IE 10 (e 11) bloccherà il modulo submit e mostrerà un messaggio di errore "il tuo input ha superato X caratteri" (o qualsiasi altra cosa), ma il messaggio di errore è nascosto perché l'elemento era nascosto, quindi l'utente non ha modo di sapere cosa sta succedendo. Sembra un bug in IE: se l'elemento è nascosto, non convalidare la lunghezza massima o mostrare come un avviso/dialogo.In realtà, dovrebbero semplicemente rimuovere questa funzionalità ... è un compito lato server – nothingisnecessary