【问题标题】:Click event doesn't get triggered点击事件不会被触发
【发布时间】:2017-01-23 09:49:54
【问题描述】:

我希望用户在点击时选择整个输入框。

在我的情况下,输入框是:

      <label for="bla">My checkbox</label>
      <input type="input" id="bla" name="check" value="checked" />

为此,我编写了以下 JS:

function SelectAll(bar){   
    bar.focus();
    bar.select();
    console.log(bar);
}    
window.onload=function()
{
   var bla=document.getElementById("bla");
   bla.addEventListener('click',SelectAll(bla),false);       
};

但我在控制台中得到的只是&lt;input type="input" value="checked" name="check" id="bla"&gt; 一次,无论我点击多少,我都无法获得更多。

【问题讨论】:

标签: javascript forms no-framework


【解决方案1】:

addEventListener回调引用应该没有参数。

.addEventListener('click', SelectAll)

通过添加(bla),它实际上被称为SelectAll(bla)(element),这不是你想要的。

【讨论】:

    【解决方案2】:

    总结我的研究,我得出以下结论:

    addEventListener 回调引用应该没有参数,因为它将事件传递给函数。

    因此,实现listener 的正确方法是.addEventListener('click', SelectAll, false)

    由于event 已传递,但您想使用实际的element,您将需要使用bar.target 来访问它。

    【讨论】:

      【解决方案3】:

      试试这个:

      $( "#bla" ).click(function() {
           bla.addEventListener('click',SelectAll(bla),false);    
          });
      function SelectAll(element){   
          element.focus();
          element.select();
          console.log(element);
      } 
      

      【讨论】:

      • 使用 jQuery,我正在积极尝试避免使用任何类型的框架。
      • 这并没有解决问题,反而让问题变得更糟。除了添加 jQuery 的事实之外,您的所有代码所做的只是添加一个 jQuery 点击绑定,该点击绑定添加了用 JavaScript 编写的原始点击绑定,它仍然存在与最初相同的问题。此外,每次单击时,您的 jQuery 绑定都会执行,添加另一个单击绑定。
      猜你喜欢
      • 2020-12-27
      • 2013-05-19
      • 2015-12-19
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多