Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当eventListener连接到IE 8中的相同元素时,如何停止事件传播?_Javascript_Events_Stoppropagation - Fatal编程技术网

Javascript 当eventListener连接到IE 8中的相同元素时,如何停止事件传播?

Javascript 当eventListener连接到IE 8中的相同元素时,如何停止事件传播?,javascript,events,stoppropagation,Javascript,Events,Stoppropagation,如果其他事件处理程序附加到IE8中的同一元素,如何停止使用纯javascript执行它们 我可以用方法停止事件传播,但IE8不支持它 //document.getElementById('my-elem').attachEvent('click',firstHandler); document.getElementById('my-elem')。addEventListener('click',firstHandler); //document.getElementById('my-elem'

如果其他事件处理程序附加到IE8中的同一元素,如何停止使用纯javascript执行它们

我可以用方法停止事件传播,但IE8不支持它

//document.getElementById('my-elem').attachEvent('click',firstHandler);
document.getElementById('my-elem')。addEventListener('click',firstHandler);
//document.getElementById('my-elem').attachEvent('click',secondHandler);
document.getElementById('my-elem')。addEventListener('click',secondHandler);
函数firstHandler(ev){
ev.stopPropagation();
警报(“1”);
}
函数第二处理程序(ev){
ev.stopPropagation();
警报(“2”);
}

如何阻止传播?
一种非常简化(可能容易出错)的聚填充/垫片。捕获原始的attachEvent/detachEvent方法,并创建将检查标志的新方法

此外,它将仅防止在调用stopImmediatePropagation之前附加的事件

if(!Event.prototype.stopImmediatePropagation){
(功能(){
var attachEvent=Element.prototype.attachEvent,
detachEvent=Element.prototype.detachEvent;
Element.prototype.attachEvent=函数(类型,回调){
attachEvent.call(此“on”+类型、函数(事件){
如果(!event.immediatePropagationsToped){
回调(事件);
}
});
};
Element.prototype.detachEvent=函数(类型,回调){
detachEvent.call(this、type、callback);
};
}());
Event.prototype.stopImmediatePropagation=函数(){
this.immediatePropagationsToped=true;
};
}
document.getElementById(“测试”).attachEvent(“单击”),函数(e){
控制台日志(“hi”);
});
document.getElementById(“测试”).attachEvent(“单击”),函数(e){
e、 停止即时复制();
控制台日志(“hi2”);
});
document.getElementById(“测试”).attachEvent(“单击”),函数(e){
控制台日志(“hi3”);
});

Click me
表示,jQuery 1.9.1也在较旧的IEs中实现了
stopImmediatePropagation
。因此这是可能的,但jQuery对事件处理模型进行了大量修改,可能很难用vanilla JS来模拟它。感谢@Teemu,可能需要指出的是,我正在寻找有问题的JS解决方案。