Internet explorer 在IE中模拟W3C事件捕获模型

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"); }; }

可以在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>
,但它看起来与W3捕获模型无关。

一般来说,您不能,因为。在IE中,事件将在没有捕获阶段的情况下从目标元素开始冒泡,因此您无法事先捕获它们

您只能做一件事,如果您管理所有事件处理程序,则只有才有可能做到这一点

  • 使用capture参数为
    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;});