我正在嘗試將類“.contact__form-input--focused”添加到以表單為焦點的輸入中。
我正在嘗試為每個輸入添加一個事件偵聽器,然后如果該類已經從類串列中洗掉該類。
//INPUT ANIMATION
const input = document.querySelectorAll("contact__form-input");
function addClass(input) {
input.classList.add("contact__form-input--focused");
}
function removeClass(input) {
input.classList.remove("contact__form-input--focused");
}
for (let i = 0; i < input.length; i ) {
if (item[i].classList.contains("contact__form-input--focused")) {
item.addEventListener("focus", addClass(input[i]));
} else {
item.addEventListener("blur", removeClass(input[i]));
}
}
.contact__form {
display: flex;
flex-direction: column;
}
.contact__form-input {
border: none;
border-bottom: .1rem solid rgba(0, 0, 0, .12);
font-size: var(--medium-font-size);
margin: 0;
padding: 4px 0;
width: 100%;
background: 0 0;
text-align: left;
color: inherit;
}
.contact__form-input--focused {
/*some animations here*/
}
<form class="contact__form" method="POST">
<label class="contact__form-label">
<span>Name</span>
<input class="contact__form-input" name="Name" type="text" autocomplete="name" required>
</label>
<label class="contact__form-label">
<span>Phone number</span>
<input class="contact__form-input" name="Phone number" type="tel" autocomplete="tel" required>
</label>
<label class="contact__form-label">
<span>Message</span>
<input class="contact__form-input" type="text" required>
</label>
<button class="contact__form-button">Send</button>
</form>
uj5u.com熱心網友回復:
如果你像這樣使用 JS 而不僅僅是:focus你的偽代碼可以通過
const inputs = document.querySelectorAll("contact__form-input");
inputs.forEach(input => {
input.addEventListener("focus", function(){
this.classList.add("contact__form-input--focused");
});
input.addEventListener("blur", function(){
this.classList.remove("contact__form-input--focused");
});
});
或者如果你想切換課程
const inputs = document.querySelectorAll("contact__form-input");
function switchInputClasses(){
this.classList.toggle("contact__form-input");
this.classList.toggle("contact__form-input--focused");
}
inputs.forEach(input => {
input.addEventListener("focus", switchInputClasses);
input.addEventListener("blur", switchInputClasses);
});
函式宣告而不是函式宣告的原因()=>{}是因為后者將保留范圍并this正確設定關鍵字您需要更改范圍,想到它的最好方法EventListner是apply()在元素上呼叫通過
偽方法只是將您的 CSS 更改為
.contact__form {
display: flex;
flex-direction: column;
}
.contact__form-input {
border: none;
border-bottom: .1rem solid rgba(0, 0, 0, .12);
font-size: var(--medium-font-size);
margin: 0;
padding: 4px 0;
width: 100%;
background: 0 0;
text-align: left;
color: inherit;
}
.contact__form-input:focus {
/*some animations here*/
}
uj5u.com熱心網友回復:
1)你沒有得到 HTML 元素,因為它contact__form-input是一個類,你必須通過在 className 之前附加來告訴querySelectorAll你正在查找其類是contact__form-input的所有元素.
const inputs = document.querySelectorAll( ".contact__form-input" );
2)您應該添加eventListener上focus或blur為:
inputs.forEach(input => {
input.addEventListener("focus", () => addClass(input))
input.addEventListener("blur", () => removeClass(input))
})
NOTE: For demo purpose I've added thick red border
//INPUT ANIMATION
const inputs = document.querySelectorAll(".contact__form-input");
function addClass(input) {
input.classList.add("contact__form-input--focused");
}
function removeClass(input) {
input.classList.remove("contact__form-input--focused");
}
console.log(inputs)
inputs.forEach(input => {
input.addEventListener("focus", () => addClass(input))
input.addEventListener("blur", () => removeClass(input))
})
.contact__form {
display: flex;
flex-direction: column;
}
.contact__form-input {
border: none;
border-bottom: .1rem solid rgba(0, 0, 0, .12);
font-size: var(--medium-font-size);
margin: 0;
padding: 4px 0;
width: 100%;
background: 0 0;
text-align: left;
color: inherit;
}
.contact__form-input--focused {
/*some animations here*/
border: 5px solid red;
}
<form class="contact__form" method="POST">
<label class="contact__form-label">
<span>Name</span>
<input class="contact__form-input" name="Name" type="text" autocomplete="name" required>
</label>
<label class="contact__form-label">
<span>Phone number</span>
<input class="contact__form-input" name="Phone number" type="tel" autocomplete="tel" required>
</label>
<label class="contact__form-label">
<span>Message</span>
<input class="contact__form-input" type="text" required>
</label>
<button class="contact__form-button">Send</button>
</form>
uj5u.com熱心網友回復:
你不需要if宣告。只需將兩個事件偵聽器添加到所有輸入即可。
的第二個引數addEventListener()必須是一個函式。您立即呼叫該函式,而不是在事件發生時呼叫。
//INPUT ANIMATION
const input = document.querySelectorAll(".contact__form-input");
function addClass(input) {
input.classList.add("contact__form-input--focused");
}
function removeClass(input) {
input.classList.remove("contact__form-input--focused");
}
for (let i = 0; i < input.length; i ) {
let item = input[i];
item.addEventListener("focus", () => addClass(item));
item.addEventListener("blur", () => removeClass(item));
}
.contact__form {
display: flex;
flex-direction: column;
}
.contact__form-input {
border: none;
border-bottom: .1rem solid rgba(0, 0, 0, .12);
font-size: var(--medium-font-size);
margin: 0;
padding: 4px 0;
width: 100%;
background: 0 0;
text-align: left;
color: inherit;
}
.contact__form-input--focused {
background-color: yellow;
}
<form class="contact__form" method="POST">
<label class="contact__form-label">
<span>Name</span>
<input class="contact__form-input" name="Name" type="text" autocomplete="name" required>
</label>
<label class="contact__form-label">
<span>Phone number</span>
<input class="contact__form-input" name="Phone number" type="tel" autocomplete="tel" required>
</label>
<label class="contact__form-label">
<span>Message</span>
<input class="contact__form-input" type="text" required>
</label>
<button class="contact__form-button">Send</button>
</form>
uj5u.com熱心網友回復:
<style type="text/css">
.contact__form {
display: flex;
flex-direction: column;
}
.contact__form-input {
border: none;
border-bottom: .1rem solid rgba(0, 0, 0, .12);
font-size: var(--medium-font-size);
margin: 0;
padding: 4px 0;
width: 100%;
background: 0 0;
text-align: left;
color: inherit;
}
.contact__form-input--focused {
/*some animations here*/
}
</style>
<form class="contact__form" method="POST">
<label class="contact__form-label">
<span>Name</span>
<input class="contact__form-input" name="Name" type="text" autocomplete="name">
</label>
<label class="contact__form-label">
<span>Phone number</span>
<input class="contact__form-input" name="Phone" type="tel" autocomplete="tel" required>
</label>
<label class="contact__form-label">
<span>Message</span>
<input class="contact__form-input" name="Text" type="Text" required>
</label>
<button class="contact__form-button">Send</button>
</form>
<script>
const inputName = document.querySelector("input[name=Name]");
const inputPhone = document.querySelector("input[name=Phone]");
const inputText = document.querySelector("input[name=Text]");
inputName.addEventListener("focus", function() {
if(inputName.classList.contains("contact__form-input--focused"))
inputName.classList.remove("contact__form-input--focused");
else
inputName.classList.add("contact__form-input--focused");
});
inputPhone.addEventListener("focus", function() {
if(inputPhone.classList.contains("contact__form-input--focused"))
inputPhone.classList.remove("contact__form-input--focused");
else
inputPhone.classList.add("contact__form-input--focused");
});
inputText.addEventListener("focus", function() {
if(inputText.classList.contains("contact__form-input--focused"))
inputText.classList.remove("contact__form-input--focused");
else
inputText.classList.add("contact__form-input--focused");
});
</script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379263.html
標籤:javascript html css 数组
