将JS功能和事件侦听器应用于多个HTML元素



我正在创建一个我在下面简化的表单,以直接达到点,JS代码是控制占位符;隐藏着焦点并重新出现在模糊之上,显然这仅适用于使用ID("名称")的输入。如何将这些功能应用于所有输入元素,而无需重复每个输入的代码。

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 Method 获得占位符,因为它是因为它始终给出零。

您可以给元素一个类,然后迭代

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');  
}

相关内容

  • 没有找到相关文章

最新更新