将 JS 函数和事件监听器应用于多个 html 元素
Applying JS function and event listener to multiple html elements
我正在创建一个表单,我在下面进行了简化以达到直截了当的目的,JS代码是控制占位符;隐藏在焦点上并重新出现在模糊上,显然这现在仅适用于带有 id('Name') 的输入。如何将这些函数应用于所有输入元素 DRY 而无需为每个输入重复代码。
var x = document.getElementById("Name");
x.addEventListener("focusin", myFocusFunction);
x.addEventListener("focusout", myBlurFunction);
function myFocusFunction() {
document.getElementById('Name').placeholder= '';
}
function myBlurFunction() {
document.getElementById('Name').placeholder= 'Name';
}
<div id='card'>
<input id='Name' type='text' placeholder='Name'/>
<input id='Age' type='text' placeholder='Age'/>
<input id='Sex' type='text' placeholder='Sex'/>
<input id='Occupation' type='text' placeholder='Occupation'/>
</div>
Array.from(document.getElementsByTagName("input")).forEach(input => {
input.addEventListener("focusin", focus);
input.addEventListener("focusout", blur.bind(input, input.placeholder));
});
function focus() {
this.placeholder = '';
}
function blur(placeholder) {
this.placeholder = placeholder;
}
<div id='card'>
<input id='Name' type='text' placeholder='Name' />
<input id='Age' type='text' placeholder='Age' />
<input id='Sex' type='text' placeholder='Sex' />
<input id='Occupation' type='text' placeholder='Occupation' />
</div>
使用 this
关键字,您可以访问触发事件的对象。
此外,您还需要以某种方式保留占位符,在上面的示例中,我使用了绑定函数,但您可以选择自己的方式。
您还可以在此答案的 revision 2 中找到如何手动指定名称的示例。
您可以给元素一个 class,然后迭代
document.querySelectorAll('.placeholder').forEach(function(el) {
el.addEventListener("focusin", myFocusFunction);
el.addEventListener("focusout", myBlurFunction);
});
function myFocusFunction() {
document.getElementById('Name').placeholder = '';
}
function myBlurFunction() {
document.getElementById('Name').placeholder = 'Name';
}
<div id='card'>
<input id='Name' class="placeholder" type='text' placeholder='Name' />
<input id='Age' class="placeholder" type='text' placeholder='Age' />
<input id='Sex' class="placeholder" type='text' placeholder='Sex' />
<input id='Occupation' type='text' placeholder='Occupation' />
</div>
需要这个功能的输入可以设置一个普通的class,比如‘add-tip’,然后:
var x = document.querySelectorAll(".add-tip");
for (var i=0;i< x.length;i++) {
x[i].addEventListener("focusin", myFocusFunction);
x[i].addEventListener("focusout", myBlurFunction);
}
function myFocusFunction(e) {
e.target.setAttribute('placeholder','');
}
function myBlurFunction(e) {
e.target.setAttribute('placeholder','Name');
}
尝试这样做
<!DOCTYPE html>
<html>
<body>
<div id='card'>
<input id='Name' type='text' placeholder='Name' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Name')" />
<input id='Age' type='text' placeholder='Age' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Age')" />
<input id='Sex' type='text' placeholder='Sex' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Sex')" />
<input id='Occupation' type='text' placeholder='Occupation' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Occupation')" />
</div>
<script>
function myFocusFunction(event) {
var element = event.target.getAttribute('id');
document.getElementById(element).placeholder= '';
}
function myBlurFunction(event,placeHolder) {
var element = event.target.getAttribute('id');
document.getElementById(element ).placeholder= placeHolder ;
}
</script>
</body>
</html>
在模糊事件中我们需要传递占位符字符串,因为在焦点上我们将占位符设置为 " " 因此,在模糊事件中我们无法通过 getAttribute 获取占位符method 因为它总是给出 null。
我正在创建一个表单,我在下面进行了简化以达到直截了当的目的,JS代码是控制占位符;隐藏在焦点上并重新出现在模糊上,显然这现在仅适用于带有 id('Name') 的输入。如何将这些函数应用于所有输入元素 DRY 而无需为每个输入重复代码。
var x = document.getElementById("Name");
x.addEventListener("focusin", myFocusFunction);
x.addEventListener("focusout", myBlurFunction);
function myFocusFunction() {
document.getElementById('Name').placeholder= '';
}
function myBlurFunction() {
document.getElementById('Name').placeholder= 'Name';
}
<div id='card'>
<input id='Name' type='text' placeholder='Name'/>
<input id='Age' type='text' placeholder='Age'/>
<input id='Sex' type='text' placeholder='Sex'/>
<input id='Occupation' type='text' placeholder='Occupation'/>
</div>
Array.from(document.getElementsByTagName("input")).forEach(input => {
input.addEventListener("focusin", focus);
input.addEventListener("focusout", blur.bind(input, input.placeholder));
});
function focus() {
this.placeholder = '';
}
function blur(placeholder) {
this.placeholder = placeholder;
}
<div id='card'>
<input id='Name' type='text' placeholder='Name' />
<input id='Age' type='text' placeholder='Age' />
<input id='Sex' type='text' placeholder='Sex' />
<input id='Occupation' type='text' placeholder='Occupation' />
</div>
使用 this
关键字,您可以访问触发事件的对象。
此外,您还需要以某种方式保留占位符,在上面的示例中,我使用了绑定函数,但您可以选择自己的方式。
您还可以在此答案的 revision 2 中找到如何手动指定名称的示例。
您可以给元素一个 class,然后迭代
document.querySelectorAll('.placeholder').forEach(function(el) {
el.addEventListener("focusin", myFocusFunction);
el.addEventListener("focusout", myBlurFunction);
});
function myFocusFunction() {
document.getElementById('Name').placeholder = '';
}
function myBlurFunction() {
document.getElementById('Name').placeholder = 'Name';
}
<div id='card'>
<input id='Name' class="placeholder" type='text' placeholder='Name' />
<input id='Age' class="placeholder" type='text' placeholder='Age' />
<input id='Sex' class="placeholder" type='text' placeholder='Sex' />
<input id='Occupation' type='text' placeholder='Occupation' />
</div>
需要这个功能的输入可以设置一个普通的class,比如‘add-tip’,然后:
var x = document.querySelectorAll(".add-tip");
for (var i=0;i< x.length;i++) {
x[i].addEventListener("focusin", myFocusFunction);
x[i].addEventListener("focusout", myBlurFunction);
}
function myFocusFunction(e) {
e.target.setAttribute('placeholder','');
}
function myBlurFunction(e) {
e.target.setAttribute('placeholder','Name');
}
尝试这样做
<!DOCTYPE html>
<html>
<body>
<div id='card'>
<input id='Name' type='text' placeholder='Name' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Name')" />
<input id='Age' type='text' placeholder='Age' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Age')" />
<input id='Sex' type='text' placeholder='Sex' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Sex')" />
<input id='Occupation' type='text' placeholder='Occupation' onfocusin="myFocusFunction(event)" onblur="myBlurFunction(event,'Occupation')" />
</div>
<script>
function myFocusFunction(event) {
var element = event.target.getAttribute('id');
document.getElementById(element).placeholder= '';
}
function myBlurFunction(event,placeHolder) {
var element = event.target.getAttribute('id');
document.getElementById(element ).placeholder= placeHolder ;
}
</script>
</body>
</html>
在模糊事件中我们需要传递占位符字符串,因为在焦点上我们将占位符设置为 " " 因此,在模糊事件中我们无法通过 getAttribute 获取占位符method 因为它总是给出 null。