ลบสีขอบที่กำหนดไว้ก่อนหน้า


20

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)
  • หากฉันคลิกที่ส่งโดยไม่ป้อนอะไรเลยสีของเส้นขอบจะเปลี่ยนเป็นสีแดง (ผ่านจาวาสคริปต์)
  • แต่เมื่อฉันนำโฟกัสไปที่ช่องข้อความอีกครั้งสีของเส้นขอบสีแดงจะไม่หายไปแทนที่จะเป็นเส้นขอบทั้งสีเขียวและสีแดง

ฉันต้องการให้เป็นสีเขียวเท่านั้น คุณสามารถอธิบายเหตุผลของพฤติกรรมนี้ได้ไหม

คำตอบ:


10

สิ่งนี้เกิดขึ้นเนื่องจากคุณได้อัพเดตสไตล์องค์ประกอบแทนCSSคุณสมบัติของคลาส CSSรูปแบบองค์ประกอบมีน้ำหนักสูงสุด แทนที่จะเพิ่มคลาสข้อผิดพลาดแบบไดนามิกบนข้อผิดพลาดและลบออกเมื่อเขตข้อมูลฟอร์มถูกต้อง

ตามเอกสารคำสั่งของสไตล์ในการลดลำดับจะเป็น

  1. รูปแบบอินไลน์ (ภายในองค์ประกอบ HTML)
  2. สไตล์ชีทภายนอกและภายใน (ในส่วนหัว)
  3. เบราว์เซอร์เริ่มต้น

นี่คือตัวอย่างการทำงาน

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>


1
คำตอบนี้ควรได้รับการยอมรับเนื่องจากการเพิ่ม! สิ่งสำคัญไม่ใช่วิธีการที่ดี
Piyush

1
น้ำหนักเป็นคำที่คุณค้นหาอยู่แล้วไม่จำเป็นต้องเพิ่มส่วนต่อท้ายของ -age
Emanuel Vintilă

3

ปัญหาคือสีมีความสำคัญในระดับเดียวกันกับ 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;
}

หวังว่านี่จะช่วยได้!


ในขณะนี้สามารถแก้ไขปัญหาได้ฉันสับสนทำไมเมื่อมีการรีเซ็ตคุณสมบัติด้วยค่าใหม่เกิดปัญหาการจัดลำดับความสำคัญ
Tick20

ตรวจสอบคำตอบของ @ Geetanjali นั่นจัดการสิ่งที่คุณพูดได้อย่างถูกต้อง
Hari Das

นั่นเป็นคำถามที่ดี เป็นเพราะใน CSS เมื่อคุณเพิ่มคุณลักษณะเช่น 'โฟกัส' คุณกำลังเพิ่มฟังในองค์ประกอบนั้นคุณจะไม่รีเซ็ตด้วยค่าใหม่ คุณลักษณะนี้จะมีผลเฉพาะเมื่อคุณมุ่งเน้นไปที่องค์ประกอบนั้น
Austin Leehealey

1

แทนที่จะเพิ่มสีจากจาวาสคริปต์คุณสามารถใช้สิ่งที่ต้องการในกล่องใส่และ: ไม่ถูกต้องใน CSS ตรวจสอบตัวอย่าง

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>


1

คุณสามารถเปลี่ยนสีของเส้นขอบบนคีย์อัปและสร้างคลาสใหม่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>


การเพิ่ม!importantคุณสมบัติให้กับองค์ประกอบใน css ทำให้สไตล์ไม่สามารถอัปเดตได้ในทุกกรณี
Nitheesh

0

คุณกำลังตั้งค่าสีผ่าน JS แต่ไม่ต้องยกเลิกการตั้งค่าดังนั้นโดยพื้นฐานแล้วพวกเขาจะถูกตั้งค่าอย่างถาวร

วิธีหนึ่งที่จะหยุดพฤติกรรมนี้ก็คือการเพิ่มฟังก์ชั่นอื่นที่จับOnClickเหตุการณ์ของฟิลด์ข้อความและ "รีเซ็ต" หรือunsetสีเมื่อพวกเขาถูกคลิกภายใน

ดูที่นี่สำหรับแนวคิดในการเริ่มต้นจัดการOnClickเหตุการณ์:

https://jsfiddle.net/warunamanjula/qy0hvmyq/1/


0

เพียงเพิ่ม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>

-1

เพราะเมื่อคุณเพิ่มสีจาก javascript, หรือทรัพย์สินของ CSS ใด ๆ ก็เพิ่มอินไลน์, border-color !importantโฟกัสดังนั้นเพียงแค่เขียน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.