javascript - 按键或输入时如何防止ONBLUR事件?

标签 javascript html

我在我的输入字段中使用了两个事件 KEYPRESSONBLUR,当按下 ENTER 键时,它会触发 KEYPRESS ONBLUR也是。

代码:

<div id="text">
 <input type="text" onblur="onBlur()" onkeypress="myFunction(event)">
</div>
 
 window.myFunction = function(e) {
 if (e.which == 13) {
 document.getElementById("text").innerHTML = "text";
   console.log("keypress");
 }
}

window.onBlur = function() {
  console.log("blur");
}

fiddle

注意事项:

我需要处理按键以及 onblur 事件,但我只需要一次触发一个事件。

例如:

  1. 当我按下enter 键时,应该触发myFunction。不是 onBlur。
  2. 当我在输入字段外单击时,应该调用 onBlur 函数。

问题:

如何在按下ENTER 键时防止ONBLUR 事件。

您的建议将不胜感激

最佳答案

您可以使用 onblur = "" 重置该属性以不再保留对先前存储的回调函数的引用。

此外,不要将函数设置为 window 的属性,这会使它们成为全局函数。而只是在您希望它们可访问的范围内声明它们。

但是,您真的不应该使用 HTML 属性设置事件处理程序,因为它们会创建意大利面条代码,导致围绕您的处理程序函数创建全局包装函数,这些函数会改变 this 绑定(bind)并且不遵循W3C DOM 事件标准。

这段代码真的应该使用 .addEventListener() .removeEventListener() 模型:

// Wait until the DOM is loaded
window.addEventListener("DOMContentLoaded", function(){

  // Get DOM reference to the input element in question
  var input = document.getElementById("myInput");

  // Attach callbacks to element for various events
  input.addEventListener("blur", doBlur);
  input.addEventListener("keypress", doKeypress);

  // By declaring your functions inside a larger function, they avoid
  // become global functions and have the appropriate scope.
  function doKeypress(e) {
   // Check for ENTER key
   if (e.keyCode === 13) {
     // Remove blur event handler
     input.removeEventListener("blur", doBlur);
   
     // Do actions
     document.getElementById("text").innerHTML = "text";   
   }
  }

  function doBlur() {
    console.log("blur");
  }
});
<div id="text">
 <input type="text" id="myInput">
</div>

关于javascript - 按键或输入时如何防止ONBLUR事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42008540/

相关文章:

javascript - 为什么测试显示 'pass' 虽然期望失败了?

html - 仅使用 CSS 单击 div 时如何显示另一个 div

html - 设计选项卡标题 CSS 以连接选项卡内容 - 圆 Angular

html - Schema.org startDate 应该使用 UTC 还是本地时区?

javascript - 使用 ES6 语法和动态路径导入模块

javascript - 在 webdriver-io 中使用 beforeEach

javascript - 如何使用 vb.net 中的按钮在新选项卡中打开 url,该按钮使用命令名称而不是通过单击事件

javascript - 当我打开 Twitter Bootstrap 模式时,如何更改我看到后面页面的方式?

html - 具有相同 svg 的 img 和 span 在 IE9 中以不同的尺寸呈现

javascript - 使用 jQuery 隐藏表行