2012-12-26 25 views
7

Ho questo codice di ingresso nella mia forma:HTML5 oninvalid non funziona dopo fissa il campo di inserimento

<input maxlength="255" id="information_name" name="information[name]" oninvalid="check(this)" placeholder="Nombre Completo" required="required" size="30" style="width:528px;height:25px;" tabindex="3" type="text"> 

a cambiare il messaggio oninvalid con questo codice javascritp:

<script> 
function check(input) { 
    if (input.value == "") { 
    input.setCustomValidity('Debe completar este campo.'); 
    } else { 
    input.setCustomValidity('Debe corregir este campo.'); 
    } 

} 
</script> 

Ecco il problema, se ho cliccato su invia e il campo è vuoto, il campo shome l'errore, quindi ho bisogno di riempire il campo, ma dopo riempire il campo, ho ancora ricevendo l'avviso anche il riempimento non è vuoto.

Cosa sto facendo male ???

risposta

5

È possibile impostare un messaggio validità personalizzato con setCustomValidity, tuttavia qualsiasi stringa non vuota farà sì che il campo di agire come se avesse un valore non valido. È necessario setCustomValidity('') per cancellare lo stato invalidato del campo.

Se la validità è semplice e controllato tramite attributi di campo, è possibile utilizzare object.willValidate di fare il test e si imposta la validità del messaggio personalizzato:

oninvalid="this.setCustomValidity(this.willValidate?'':'your custom message')"

+3

willValidate è una proprietà che indica se un input può essere convalidato o meno, non se è valido o meno. – tyebillion

1

Se si utilizza il valore setCustomValidity per un valore diverso da una stringa vuota, lo stato input si troverà nello stato invalid. Quindi la tua condizione sta verificando un valore, quindi imposta il campo in modo che sia invalid in entrambi i casi. Solo setCustomValidity quando il valore nel campo è in realtà valida, altrimenti impostarlo su una stringa vuota:

<script> 
function check(input) { 
    if (input.value == "") { 
    input.setCustomValidity('Debe completar este campo.'); 
    } else { 
    input.setCustomValidity(''); 
    } 
} 
</script> 
14

Se si imposta un valore con setCustomValidity() allora il campo è non valido. Questa impostazione di una stringa di lunghezza diversa da zero fa sì che il browser consideri il campo non valido. Per avere effetti sul tuo nuovo input devi cancellare la validità personalizzata. Semplicemente è possibile utilizzare il seguente:

<input required maxlength="255" id="information_name" minlength=1 name="information[name]" oninvalid="setCustomValidity('Should not be left empty.')" 
    oninput="setCustomValidity('')" /> 

Non v'è alcuna necessità di utilizzare Javascript per questo.

+12

"Non c'è bisogno di usare Javascript per questo" - questo è Javascript, sebbene sia inserito negli attributi on .... – stracktracer

+0

[Curious di frase che hai usato lì] (https://stackoverflow.com/a/16878766/8655) – robertc

+0

Una cosa che ho notato e non so perché ... perché passa "test @ test"? quella non è un'e-mail valida – carinlynchin

0

Per me solo oninvalid="this.setCustomValidity(this.willValidate ? '' :'You must choose the account type from the list')" funziona. Ci sono molti problemi durante l'utilizzo con IE.

Problemi correlati