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>
- 텍스트 필드에 초점을 맞추면 배경 및 테두리 색상이 각각 CSS를 통해 노란색과 녹색으로 바뀝니다.
- 아무 것도 입력하지 않고 제출을 클릭하면 테두리 색상이 (자바 스크립트를 통해) 빨간색으로 바뀝니다.
- 그러나 텍스트 필드에 다시 초점을 맞추면 빨간색 테두리 색상이 사라지지 않고 녹색과 빨간색 테두리가 모두 나타납니다.
나는 그것이 녹색이 되기만을 원합니다. 이 동작의 이유를 설명 할 수 있습니까?
답변
CSS
클래스 속성 대신 요소 스타일을 업데이트했기 때문에 이런 일이 발생 합니다. 요소 스타일의 가중치가 가장 높습니다 CSS
. 대신 오류시 동적으로 오류 클래스를 추가하고 양식 필드가 유효한 경우 제거하십시오.
당으로 문서 , 감소하는 순서로 스타일의 순서가 될 것입니다.
- 인라인 스타일 (HTML 요소 내부)
- 외부 및 내부 스타일 시트 (헤드 섹션)
- 브라우저 기본값
다음은 실제 예입니다
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").classList.add("invalidInput");
return false;
} else {
document.getElementById("username").classList.remove("invalidInput")
}
if (password == "") {
document.getElementById("message").innerHTML = "PASSWORD CANNOT BE EMPTY";
document.getElementById("password").classList.add("invalidInput")
return false;
} else {
document.getElementById("password").classList.remove("invalidInput")
}
}
#username:focus {
background-color: yellow;
border-color: green;
}
#password:focus {
background-color: yellow;
border-color: green;
}
.invalidInput {
border-color: red;
}
#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"></p>
</form>
답변
문제는 색상이 CSS와 동일한 수준의 중요성을 가지므로 코드는 우선 순위를 알 수 없다는 것입니다. 그래서 그것을 고치려면 CSS 코드에서 녹색을 더 중요하게 만들어야합니다.
그렇게하려면 포커스 CSS 코드를 다음과 같이 변경하십시오.
#username:focus {
background-color: yellow !important;
border-color: green !important;
}
#password:focus {
background-color: yellow !important;
border-color: green !important;
}
#message {
color: red;
}
도움이 되었기를 바랍니다!
답변
자바 스크립트에서 색상을 추가하는 대신 입력 상자에 필요하고 CSS에서 : invalid를 사용할 수 있습니다. 스 니펫 확인
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;
}
#username:invalid{
background-color: none;
border-color: red;
}
#password:focus{
background-color: yellow;
border-color: green;
}
#password:invalid{
background-color: none;
border-color: red;
}
#message {
color: red;
}
<form onsubmit=" return validate()">
LOGIN:-
<br>
<input id="username" type="text" name="username" placeholder="USERNAME" required>
<br>
<input id="password" type="password" name="password" placeholder="PASSWORD" required>
<br>
<input type="submit" value="SUBMIT">
<p id="message">
</form>
답변
키업시 테두리 색상을 되돌리고 error
테두리 색상을 빨간색으로 덮어 쓰는 새 클래스 를 만들 수 있습니다.
function retainColor(ele){
ele.style.borderColor = "inherit";
document.getElementById("message").innerHTML = "";
}
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").classList.add("error");
return false;
}else{
document.getElementById("username").classList.remove("error");
}
if (password == "") {
document.getElementById("message").innerHTML = "PASSWORD CANNOT BE EMPTY";
document.getElementById("password").classList.add("error");
return false;
}else{
document.getElementById("password").classList.remove("error");
}
}
#username:focus {
background-color: yellow;
border-color: green;
}
#password:focus {
background-color: yellow;
border-color: green;
}
.error {
border-color: red;
}
.error {
border-color: red;
}
#message {
color: red;
}
<form onsubmit=" return validate()">
LOGIN:-
<br>
<input id="username" type="text" onkeyup="retainColor(this)" name="username" placeholder="USERNAME">
<br>
<input id="password" type="password" onkeyup="retainColor(this)" name="password" placeholder="PASSWORD">
<br>
<input type="submit" value="SUBMIT">
<p id="message">
</form>
답변
JS를 통해 색상을 설정하고 있지만 설정을 해제하지 않으므로 본질적으로 영구적으로 설정됩니다.
이 동작을 중지하는 한 가지 방법 OnClick
은 텍스트 필드 의 이벤트 를 포착 하고 “재설정”하거나 다른 기능을 추가하는 것 입니다.unset
내부를 클릭 할 때 색상 입니다.
OnClick
이벤트 처리를 시작하는 방법에 대한 아이디어를 보려면 여기를 살펴보십시오 .
답변
onfocus
속성 추가
자바 스크립트
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;
}
}
function myfunction(var id){
document.getElementById(id).style.borderColor = "green";
document.getElementById(id).style.background-color= "yellow";
}
HTML
<form onsubmit=" return validate()">
LOGIN:-
<br>
<input id="username" type="text" onfocus="myFunction('username')" name="username" placeholder="USERNAME">
<br>
<input id="password" type="password" onfocus="myFunction('password')" name="password" placeholder="PASSWORD">
<br>
<input type="submit" value="SUBMIT">
<p id="message">
</form>
답변
javascript 또는 CSS의 속성에서 색상을 추가하면 인라인으로 추가되므로 focus 만 작성하십시오 border-color
!important
.