Javascript:如何防止在窗口聚焦时触发对输入的关注?

时间:2016-10-02 18:50:08

标签: javascript html input event-listener onfocus

我有一个输入的经典案例,在获得焦点时会被清除。

问题在于,当用户从电子表格中复制某些数据时,例如然后返回将此数据添加到输入中,触发输入的焦点事件并清除它们键入的任何内容。

如何防止由于浏览器窗口焦点而触发onfocus 而不是点击输入,标签,标签点击或任何传统操作网页?

没有遗憾。

编辑: 好吧,显然有些人喜欢每次帖子都没有代码时都会投票。因此,如果您需要一个代码来掌握这个简单的想法,那么它就是:

<input type=text onfocus="this.value=''">

1 个答案:

答案 0 :(得分:1)

从技术上讲,切换窗口会导致元素丢失/重新获得焦点。当然,这会触发focus事件处理程序。没有办法区分导致焦点事件发生的原因。

如果您只想在手动选择字段时清除该字段,请改为使用click事件:

<input type=text onclick="this.value=''">

您可以检测页面是否失去焦点。有可能使用它来推断在重新获得焦点时是否应该清除input。我不确定事件顺序是否重要,或者事件顺序是否因所涉及的浏览器而异。

<input type=text>
donotclear = false;

addEventListener('blur',function(e){
  donotclear = true;
});

document.getElementsByTagName('input')[0].addEventListener('focus',function(e){
  if(donotclear) {
    donotclear = false;
  } else {
    this.value = '';
  }
});