触发所有监听事件除了触发器本身

问题描述:

我有一对夫妇的绑定到自定义事件的链接。通过悬停任何这些链接触发事件。但我不希望它在我实际悬停的链接上触发。触发所有监听事件除了触发器本身

我能想到几个可能的解决方案

  1. 的我把“如果”在该事件的回调函数,并以某种方式检查触发对象是试图运行回调函数的对象,相应地处理。可以用方便有效的方式比较对象吗?

  2. 暂时解除绑定触发事件对象的监听器,然后重新绑定之后。这听起来并不简单,因为事件在实际触发之前可能会反弹。我不知道如何处理这些类型的事件队列。在执行下一条语句之前,jquery.trigger是否会影响所有侦听器?另一个缺点是它可能被认为是黑客而不是良好的做法?你的意见?

  3. 跳过整个事件绑定触发的事情,只是收集每一个对象在数组中,并让悬停回调函数通过这个做我想做的事情重复。我想这实际上是一个像在幕后的实际发生的事情

是否有解决此问题的常见做法?可能是观察者模式中的某些东西?

+1

“我有一对夫妇的绑定到自定义事件的联系。本次活动由任何徘徊这些链接触发。不过,我不希望它被我居然徘徊的链接触发的事。”你真的要解释。这没有太大的意义。 – Jere 2010-12-05 13:27:31

给每个链路ID和类。当鼠标进入您的某个特殊链接的活动区域时,使用鼠标悬停的链接的ID在所有链接上激发您的自定义事件。让您的自定义事件处理程序检查以确保该ID与收到事件通知的链接的ID不匹配。

<a class="fancy-hover" id="1" href="foo">Example Link 1</a> 
<a class="fancy-hover" id="2" href="bar">Example Link 2</a> 
<a class="fancy-hover" id="3" href="qux">Example Link 3</a> 

<script type="text/javascript"> 
    // custom event 
    $("a.fancy-hover").bind('mouseOverOneOfUs',function(event, whatMouseHoversOver){ 

     // Prevent item mouse is over from responding. 
     if (whatMouseHoversOver != this.id) { 
      // do something 
     } 
     return false; // Stop propagation up the DOM tree. Remove to allow propagation. 
    }); 

    // When mouse enters the active area of a link with class "fancy-hover", 
    //  tell all links in the class which member of the class has the mouse. 
    $("a.fancy-hover").mouseenter(function() { 

     // this.id is ID of current element, 
     //  and we pass the value as an array to our custom event. 
     $("a.fancy-hover").trigger('mouseOverOneOfUs', [this.id]); 
    }); 
</script>