Internet explorer 在IE中模拟W3C事件捕获模型
可以在Internet Explorer中进行模拟吗 例如: <a>one</a> <a>two</a> <a>three3</a> <script> var links = document.getElementsByTagName("A"); for (var i=0; i < links.length; i++) { links[i].onclick = function(){ alert("clicked"); }; } </script>Internet explorer 在IE中模拟W3C事件捕获模型,internet-explorer,events,dom,javascript-events,event-handling,Internet Explorer,Events,Dom,Javascript Events,Event Handling,可以在Internet Explorer中进行模拟吗 例如: <a>one</a> <a>two</a> <a>three3</a> <script> var links = document.getElementsByTagName("A"); for (var i=0; i < links.length; i++) { links[i].onclick = function(){ alert("clicked"); }; }
,但它看起来与W3捕获模型无关。一般来说,您不能,因为。在IE中,事件将在没有捕获阶段的情况下从目标元素开始冒泡,因此您无法事先捕获它们 您只能做一件事,如果您管理所有事件处理程序,则只有才有可能做到这一点
addEvent
编写一个包装器数组中
数组
调用每个元素上的原始事件处理程序IE有一个Element.setCapture()方法,您可能会发现它很有用。它允许您将所有鼠标事件路由到名为setCapture()的元素。setCapture用于在浏览器窗口外保留一些与鼠标相关的操作 它用于实现某种拖放操作 如果将鼠标移到某个元素上,并将指针移到浏览器窗口外,mousemove事件将停止工作 如果设置Capture(),mousemove事件将在浏览器窗口外继续工作 以及释放捕获的相关方法 因此,它与捕获事件模型没有任何共同之处 而且,目前还没有已知的方法在internet explorer中以标准方式模拟它 希望这有帮助 JavaScript实验室的项目似乎模拟了捕获阶段。转到并选择所有内容,然后选择注释格式。然后下载代码并搜索“捕获”一词。我没有测试这个库,也没有阅读它的大部分代码。
函数myFunction(e){
function myFunction(e) {
if (!e) var e = window.object;//legacy event object
if (e.preventDefault) e.preventDefault();//prevent firing in W3C model
return false; //exit event, no firing, listener must registered to anchor tag
}
var x = document.getElementsByTagName("A");
if (x.item(0).addEventListener) {
for (var i = 0, l = x.length; i < l; i++) {
x.item(i).addEventListener("click",myFunction,false);
}
}//W3C model
else if (x.item(0).attachEvent) {
for (var i = 0, l = x.length; i < l; i++) {
x.item(i).attachEvent("onclick",myFunction);
}
}// legacy browsers
如果(!e)var e=window.object;//旧事件对象
if(e.preventDefault)e.preventDefault();//防止在W3C模型中触发
return false;//退出事件,不触发,侦听器必须注册到锚标记
}
var x=document.getElementsByTagName(“A”);
if(x.item(0).addEventListener){
对于(变量i=0,l=x.length;i
如果您仅使用冒泡进行单击,则最好的方法是:
if (document.addEventListener) document.addEventListener("click", function(e){e.preventDefault();},false);
else if (document.attachEvent) document.attachEvent("onclick", function(){window.event.returnValue = false;});
当你否决投票时,请留下评论!据我所知,模拟捕获阶段的唯一方法是使用setCapture。OP似乎不想使用它,但没有其他方法。如果你想否决我,请证明我错了。我怀疑这被否决了,因为OP在问如何处理IE中的捕获和冒泡事件阶段,这样他就可以阻止子元素接收事件。他无法使用
.setCapture()
方法来完成他的尝试-它根本不“模拟捕获阶段”,它只是在拖动过程中影响鼠标事件的目标。
if (document.addEventListener) document.addEventListener("click", function(e){e.preventDefault();},false);
else if (document.attachEvent) document.attachEvent("onclick", function(){window.event.returnValue = false;});