Mam następujący formularz HTML5: http://jsfiddle.net/nfgfP/
<form id="form" onsubmit="return(login())">
<input name="username" placeholder="Username" required />
<input name="pass" type="password" placeholder="Password" required/>
<br/>Remember me: <input type="checkbox" name="remember" value="true" /><br/>
<input type="submit" name="submit" value="Log In"/>
Obecnie, gdy klikam Enter, gdy oba są puste, pojawia się wyskakujące okienko z napisem „Proszę wypełnić to pole”. Jak zmienić domyślną wiadomość na „To pole nie może być puste”?
EDYCJA: Zauważ też, że komunikat o błędzie pola hasła typu jest po prostu *****
. Aby odtworzyć to, podaj nazwę użytkownika i naciśnij „Prześlij”.
EDYCJA : Używam Chrome 10 do testowania. Zrób to samo
javascript
html
forms
validation
Skizit
źródło
źródło
Odpowiedzi:
Użyj
setCustomValidity
:I zmieniono wanilii JavaScript z Mootools jak sugeruje @itpastorn w komentarzach, ale powinieneś być w stanie wypracować Mootools równoważne, jeżeli jest to konieczne.
Edytować
Zaktualizowałem tutaj kod, ponieważ
setCustomValidity
działa nieco inaczej niż zrozumiałem, kiedy pierwotnie odpowiedziałem. JeślisetCustomValidity
zostanie ustawiona wartość inna niż pusty ciąg, spowoduje to, że pole zostanie uznane za nieprawidłowe; dlatego musisz to wyczyścić przed przetestowaniem poprawności, nie możesz po prostu ustawić i zapomnieć.Dalsza edycja
Jak wskazano w komentarzu @ thomasvdb poniżej, musisz wyczyścić niestandardową ważność w niektórych przypadkach poza, w
invalid
przeciwnym razie może istnieć dodatkowe przejście przez programoninvalid
obsługi, aby je wyczyścić.źródło
input
zdarzenia. W tej chwili jest to usuwane tylko wtedy, gdyinvalid
wydarzenie zostanie uruchomione .$("")
zwraca tablicę obiektów, nawet jeśli jest tylko jeden.$("")[i]
jest najprawdopodobniej tym, czego chcesz.Oto kod do obsługi niestandardowego komunikatu o błędzie w HTML5
Ta część jest ważna, ponieważ ukrywa komunikat o błędzie, gdy użytkownik wprowadza nowe dane:
źródło
Sterowanie komunikatami niestandardowymi za pomocą
HTML5
zdarzenia jest bardzo prosteoninvalid
Oto kod:
To jest najważniejsze:
źródło
onchange="this.setCustomValidity('')"
błędu zniknie. Sprawdź moją odpowiedź poniżej.oninput
zamiastonvalid
.oninput
jest to bardziej uniwersalne rozwiązanie,onvalid
nie działało nawet w Chrome dla mnie.Uwaga: to nie działa już w Chrome, nie było testowane w innych przeglądarkach. Zobacz zmiany poniżej. Ta odpowiedź pozostawia się tutaj w celach historycznych.
Jeśli uważasz, że łańcuch sprawdzania poprawności nie powinien być ustawiony kodem, możesz ustawić atrybut tytułu elementu wejściowego na „To pole nie może być puste”. (Działa w Chrome 10)
Zobacz http://jsfiddle.net/kaleb/nfgfP/8/
W przeglądarce Firefox możesz dodać ten atrybut:
Edytować
Wydaje się, że to się zmieniło, odkąd napisałem tę odpowiedź. Teraz dodanie tytułu nie zmienia komunikatu o ważności, tylko dodaje załącznik do wiadomości. Nadal obowiązuje skrzypka powyżej.
Edytuj 2
Chrome nie robi teraz nic z atrybutem title od Chrome 51. Nie jestem pewien, w której wersji to się zmieniło.
źródło
x-moz-errormessage="This field should not be left blank."
Kontrolowanie niestandardowych wiadomości za pomocą
HTML5
oninvalid
wydarzenia jest bardzo prosteOto kod:
źródło
Po ustawieniu i rozbrojeniu
setCustomValidity
we właściwym czasie komunikat sprawdzania poprawności będzie działał bezbłędnie.Użyłem
onchange
zamiast tego,oninput
który jest bardziej ogólny i występuje, gdy wartość jest zmieniana w dowolnym stanie, nawet poprzez JavaScript.źródło
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
może być pusty, na przykład gdy opcja zostanie usunięta z pola React Select. Nie zapomnij tego sprawdzić.onChange
ionInvalid
jakoinputProps={{ onInvalid: …, onChange: …, }}
type='email'
jest nieco trudniejsze do wyleczenia, ponieważ przy użyciusetCustomValidity
zestawówcustomError: true
doe.target.validity
nawet jeśli wejście jest prawidłowy. Próbuję znaleźć sposób, aby to naprawić.Zrobiłem małą bibliotekę, aby ułatwić zmianę i tłumaczenie komunikatów o błędach. Możesz nawet zmieniać teksty według rodzaju błędu, który obecnie nie jest dostępny
title
w Chrome lubx-moz-errormessage
Firefox. Go to sprawdzić na GitHub , i przekazywać informacje zwrotne.Jest używany jak:
W jsFiddle dostępna jest wersja demonstracyjna .
źródło
Wypróbuj ten, jest lepszy i przetestowany:
HTML:
JAVASCRIPT:
Próbny:
http://jsfiddle.net/patelriki13/Sqq8e/
źródło
Najłatwiejszym i najczystszym sposobem, jaki znalazłem, jest użycie atrybutu danych do przechowywania niestandardowego błędu. Przetestuj poprawność węzła i obsłuż błąd, korzystając z niestandardowego kodu HTML.
le javascript
i trochę super HTML5
źródło
A-z
pozwala na '[' '\', ']' '^' '_' i ''!'.Rozwiązanie zapobiegające komunikatom o błędach przeglądarki Google Chrome przy wprowadzaniu każdego symbolu:
źródło
Mam prostsze rozwiązanie tylko waniliowe js:
W przypadku pól wyboru:
Dla danych wejściowych:
źródło
Dostosowując odpowiedź Salara do JSX i React, zauważyłem, że React Select nie zachowuje się tak jak
<input/>
pole dotyczące sprawdzania poprawności. Najwyraźniej potrzeba kilku obejść, aby wyświetlić tylko niestandardowy komunikat i nie wyświetlać go w niewygodnych momentach.Podniosłem tutaj problem , jeśli coś to pomaga. Oto CodeSandbox z działającym przykładem, a najważniejszy kod jest tutaj odtworzony:
źródło
Ok, oninvalid działa dobrze, ale pokazuje błąd, nawet jeśli użytkownik wprowadził prawidłowe dane. Użyłem więc poniżej, aby go rozwiązać, mam nadzieję, że to również zadziała dla ciebie,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
źródło
Można to łatwo obsłużyć, umieszczając „tytuł” w polu:
źródło