javascript - onblur - 如何判断点击了什么;或者如何判断 onclick 事件是否正在等待运行

标签 javascript jquery events onclick onblur

在下面的代码中,有没有办法将 blurredByClickOnLink 设置为正确的值(不使用鼠标悬停或其他指针事件在点击发生之前设置某些内容)?如果用户通过单击链接使文本框变模糊,则它应该为 true,如果用户通过 tab 键或单击其他任何地方使文本框变模糊,则它应该为 false。感谢您的关注!

<html>
<body>
<input id="myInput" type="text" onblur="var blurredByClickOnLink='???'; console.log('input onblur. blurred by click on link = ' + blurredByClickOnLink);" />
<br/><br/>
<a id="myLink" href="javascript:console.log('a href');void(0);" onclick="console.log('a onclick');">Link</a>
</body>
</html>

最佳答案

当 DOM 上发生事件时,该事件本质上是“原子的”。这意味着事件将从事件队列中处理,然后才会处理下一个事件。这些事件没有以任何方式“组合”在一起。

当您的输入元素失去焦点时,将在其上触发 blur 事件。那时,您现在可以提出有关 blur 的问题。但是,环境的其余部分不会有任何其他状态变化。接下来发生的可能是单击 link 元素,这也可能会触发事件。在这种情况下,链接上的单击事件。由于这些一个接一个地发生......首先是输入模糊,然后......后来......点击链接,你无法知道模糊何时发生,接下来发生的事情将是点击在链接上,因为它还没有发生。

一个可能的解决方案是在输入模糊时设置一个短计时器。这个计时器可以触发另一个函数(比如 100 毫秒),然后问这个问题……链接被点击了吗?

这可能足以解决您的难题。

它帮助我思考此类问题的方法是可视化浏览器逐一处理以更改 DOM 状态的请求队列(收件箱)。问问自己“当我处理一个请求时,我是否有做出决定所需的信息?”

关于javascript - onblur - 如何判断点击了什么;或者如何判断 onclick 事件是否正在等待运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297352/

相关文章:

javascript - 使用 jQuery v2.0.2 和 Play Framework 运行 Selenium 测试时出错

javascript - jQuery表格搜索切表头

c# - 寻找有关 C# 委托(delegate)和(自定义)事件的初学者示例/教程

.net - 如何获得事件的反馈?

javascript - 是否可以使用 Javascript/JQuery 在 DOM 窗口上触发按键事件

javascript - 使用 underscore.js 过滤多维数组

javascript - 使用 jQuery 获取数据属性值列表

Javascript 使用 SheetJS 在服务器上读取 Excel 文件

javascript - 使用 promises 增量加载图像

jquery - 使用 jQuery 在 AngularJS 元素指令上绑定(bind)事件