javascript - 如何确定两个 HTML 事件具有相同的来源(然后确定“事件已处理”)
问题描述
如何确定两个 HTML 事件具有相同的来源?我需要的是只处理一次点击事件(没有 stopPropogation 因为点击的 stopPropogation 是“不适合下拉菜单、模式等”)
originalEvent 的比较(使用 jQuery)if (event.originalEvent != processedEvent.originalEvent)
效果很好,但我想在 vanilla js 中做同样的事情。
我们是否有方便的纯 js 方法来做同样的事情?
var processedEvent = null;
$("#myButton").click(
function(event){
console.log("this should be processed once")
processedEvent = event;
}
)
$("#myPanel").click(
function(event){
if (event.originalEvent == processedEvent.originalEvent)
console.log("nice. we are going to ingore event")
else
console.log("error. event processed second time")
processedEvent=null;
}
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="myPanel">
<button id="myButton">Click Me jQuery</button>
</div>
</div>
解决方案
PreventDefault 是一种非常标准的方法。您调用event.preventDefault()
最里面的处理程序,然后您的外部处理程序应该检查if (!event.isDefaultPrevented()) {
jquery 或if (!event.defaultPrevented) {
vanilla js。
您可以将自定义属性作为标志添加到事件对象,例如event._customWasHandled = true
,然后在以后的处理程序中检查这些属性。
推荐阅读
- data-visualization - 如何将列标题从上到下?
- azure - 在 ADF 中创建用于检查文件的依赖关系管道是最新的
- string - 如何在字符串中找到最大重复字符
- python - Mypy 关于类型类型的断言
- excel - 在 Google 表格/Excel 中从工作日获取下一个日期
- python - python之间如何共享c++定义的实例化对象?
- python - 使用 for/if 循环 pandas 计算字长
- python - 通过 OAuth 客户端 ID ServiceAccount 凭据授权 python 脚本时,您能否将对 python 脚本的访问限制为两个 google 工作表
- reactjs - 如何访问设置 redux 道具以反应状态?
- algorithm - 为什么 O(log(n)) 等于 O(log(n!))?