2012-12-26 10 views
7

Mam ten kod wejściowy w moim formularzu:html5 oninvalid nie działa po stałym polu wprowadzania

<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"> 

zmienić oninvalid wiadomość z tego kodu javascript:

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

} 
</script> 

Oto problem, jeśli kliknąłem na przesłanie, a pole jest puste, pole shome błędu, więc muszę wypełnić pole, ale po wypełnieniu pola, wciąż otrzymuję ostrzeżenie, nawet wypełnienie nie jest puste.

Co robię źle?

Odpowiedz

5

Można ustawić niestandardowy komunikat ważność z setCustomValidity jednak każdy niepusty ciąg spowoduje pole do działania jako jeśli miał nieprawidłową wartość. Aby usunąć unieważniony stan pola, musisz wykonać setCustomValidity('').

Jeśli ważność jest prosta i kontrolowane poprzez atrybuty polowych, można użyć object.willValidate zrobić test i ustawić niestandardowy komunikat Ważność:

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

+3

willValidate jest właściwością, która określa, czy dane wejściowe mogą być sprawdzane, czy nie, czy jest prawidłowe, czy nie. – tyebillion

1

Jeśli podłączysz setCustomValidity do dowolnej wartości, która nie jest pustym ciągiem, spowoduje to, że input będzie w stanie invalid. Zatem twój warunek sprawdza wartość, a następnie ustawia pole w taki sposób, aby było invalid. Tylko setCustomValidity gdy wartość w polu jest rzeczywiście nieważne, inaczej ustawić go na pusty ciąg znaków:

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

Jeśli ustawisz wartość z setCustomValidity() to pole jest nieważny. To ustawienie niezerowej długości łańcucha powoduje, że przeglądarka uznaje to pole za nieważne. Aby wykorzystać efekty nowych danych wejściowych, musisz wyczyścić niestandardową poprawność. prostu można użyć następujących:

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

Nie ma potrzeby korzystania z Javascript w tej sprawie.

+12

"Nie ma potrzeby używania Javascriptu w tym celu" - to jest JavaScript, chociaż podkreślony w atrybutach on .... – stracktracer

+0

[Ciekawy zwrot, którego tam użyłeś] (https://stackoverflow.com/a/16878766/8655) – robertc

+0

Jedna rzecz zauważyłem i nie wiem dlaczego ... dlaczego "test @ test" przechodzi? to nie jest poprawny e-mail – carinlynchin

0

Dla mnie działa tylko . Podczas korzystania z IE występuje wiele problemów.

Powiązane problemy