检查在旧版Internet Explorer中事件重定向期间一个事件是否与另一个事件相同
Check if one event is identical to another during event retargeting in older Internet Explorer
如果在Internet Explorer中尝试此操作,您可以看到在冒泡期间分派的事件不是唯一的:
var x;
myinnerdiv.onclick = function() { x = window.event; };
myparentdiv.onclick = function() { alert(x === window.event); };
// false, but should be the same!
使用基于等效标准的方法:
var x;
myinnerdiv.onclick = function(ev) { x = ev; };
myparentdiv.onclick = function(ev) { alert(x === ev); };
// true: same event, retargeted
是否有一种方法可以唯一地识别代码中的事件,以解决这种缺乏功能的问题?
window.event
不是数据值,而是用于创建事件对象的getter函数。和大多数人一样DOM的属性不是数据值,而是访问器函数。
你甚至可以把它们放在一起做:
div.onclick = function() {
var a = window.event;
var b = window.event;
alert( a === b ) // false
};
无论如何,只要创建自己的函数:
window.getEvent = (function() {
var e = {};
return function() {
var cur = window.event;
if( cur.type === e.type &&
cur.srcElement === e.srcElement &&
cur.clientX === e.clientX &&
cur.clientY === e.clientY &&
cur.keyCode === e.keyCode ) {
return e.evt;
}
e.type = cur.type;
e.srcElement = cur.srcElement;
e.clientX = cur.clientX;
e.clientY = cur.clientY;
e.keyCode = cur.keyCode;
e.evt = cur;
return cur;
};
})();
myinnerdiv.onclick = function () {
var event = getEvent();
event.myCustomProp = 3;
};
myparentdiv.onclick = function () {
var event = getEvent();
alert( event.myCustomProp === 3 );
};
它假设这5个值足以判断事件对象是否代表相同的事件,这在我看来是合理的。
测试页面在这里,精确点击文本"asd"(红色),因为html是:
<div id="myparentdiv">
daa
<div id="myinnerdiv">asd</div>
daa
</div>
如果你想要的东西是肯定的工作,那么只需使用jQuery,你基本上必须从头开始创建一个完整的事件模型
一个简单的方法:只比较event1。timeStamp和event2.timeStamp
相关文章:
- 使用类从一个标记中双击事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 导航到特定事件的另一个变量页面
- 来自文档或下一个静态父级的事件委派
- 在创建对象后附加一个jquery事件
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- 如何在所有ng点击事件AngularJS上启动一个方法
- 是否<asp:文本框>有一个onFocusLost事件
- React应用程序:道具在下一个事件后更新
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 全局屏幕span onclick触发一个事件javascript
- 事件循环的MEAN.JS setInterval进程(从另一个服务器获取数据)
- 添加一个javascript函数来下载elfinder上的事件
- jQuery触发器事件在一个循环中多次出现
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 是否可以同时为一个元素的所有事件指定阻止默认值
- angularjs调用事件中控制器的一个函数