function validate() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
if (username == "") {
document.getElementById("message").innerHTML = "USERNAME CANNOT BE EMPTY";
document.getElementById("username").style.borderColor = "red";
return false;
}
if (password == "") {
document.getElementById("message").innerHTML = "PASSWORD CANNOT BE EMPTY";
document.getElementById("password").style.borderColor = "red";
return false;
}
}
#username:focus {
background-color: yellow;
border-color: green;
}
#password:focus {
background-color: yellow;
border-color: green;
}
#message {
color: red;
}
<form onsubmit=" return validate()">
LOGIN:-
<br>
<input id="username" type="text" name="username" placeholder="USERNAME">
<br>
<input id="password" type="password" name="password" placeholder="PASSWORD">
<br>
<input type="submit" value="SUBMIT">
<p id="message">
</form>
- Kiedy skupiam się na polach tekstowych, kolor tła i obramowania zmienia się odpowiednio na żółty i zielony (poprzez css).
- Jeśli kliknę przycisk Prześlij bez wprowadzania danych, kolor obramowania zmieni się na czerwony (przez javascript).
- Ale kiedy ponownie skupiam się na polu tekstowym, czerwony kolor obramowania nie znika, zamiast tego otrzymuję zarówno zielone, jak i czerwone obramowania.
Chcę, żeby była tylko zielona. Czy możesz również wyjaśnić przyczynę tego zachowania.
javascript
html
css
SuperAadi
źródło
źródło
Problem polega na tym, że kolory mają ten sam poziom ważności co css, a zatem kod nie wie, który z nich ma priorytet. Aby to naprawić, musisz uczynić zielony ważniejszym w kodzie css.
Aby to zrobić, zmień kod css fokusa, aby wyglądał następująco.
Mam nadzieję że to pomoże!
źródło
Zamiast dodawać kolor z javascript, możesz użyć pola wymaganego i: niepoprawnego w CSS. Sprawdź fragment kodu
źródło
Możesz po prostu przywrócić kolor obramowania podczas tworzenia klucza i utworzyć nową klasę,
error
aby zastąpić kolor obramowania na czerwonyźródło
!important
właściwości do elementu w css powoduje, że styl nie może być aktualizowany w żadnym przypadku.Ustawiasz kolory za pomocą JS, ale nigdy ich nie odznaczasz, więc zasadniczo są one ustawiane na stałe.
Jednym ze sposobów na powstrzymanie tego zachowania jest także dodanie innej funkcji, która przechwytuje
OnClick
zdarzenie pól tekstowych i „resetuje” lubunset
kolory po kliknięciu w nie.Sprawdź tutaj, jak rozpocząć obsługę tego
OnClick
wydarzenia:https://jsfiddle.net/warunamanjula/qy0hvmyq/1/
źródło
Po prostu dodaj
onfocus
atrybutJavaScript
HTML
źródło
Ponieważ kiedy dodajesz kolor z javascript lub jakiejkolwiek właściwości css, jest on dodawany bezpośrednio, więc po prostu napisz fokus
border-color
!important
.źródło