[英]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
关键字可以访问触发事件的对象。
此外,您需要以某种方式保留占位符,在上面的示例中,我使用了绑定函数,但您可以选择自己的方式。
您还可以找到如何在此答案的修订版2中手动指定名称的示例。
试着做这个
<!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>
在blur事件中,我们需要传递占位符字符串,因为在焦点上我们将占位符设置为“”因此,在blur事件中,我们无法通过getAttribute方法获取占位符,因为它始终为null。
你可以给元素一个类,然后迭代
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>
您可以为需要此功能的输入设置公共类,例如“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');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.