【问题标题】:Trigger an event for all listeners except the trigger itself为除触发器本身之外的所有侦听器触发事件
【发布时间】:2010-12-05 13:13:09
【问题描述】:

我有几个链接绑定到自定义事件。该事件是通过悬停任何这些链接来触发的。但是我不希望它在我实际悬停的链接上触发。

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

  1. 我在事件的回调函数中放置了一个“if”,并以某种方式检查触发对象是否是尝试运行回调函数并相应处理 t 的对象。可以方便有效地比较对象吗?

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

  3. 跳过整个事件绑定触发器,只收集数组中的每个对象,然后让悬停回调函数遍历它做任何我想做的事情。我想这实际上有点像上述场景中幕后实际发生的事情

有解决此问题的通用做法吗?观察者模式中的某些东西?

【问题讨论】:

  • “我有几个链接绑定到一个自定义事件。该事件是通过悬停任何这些链接触发的。但是我不希望它在我实际悬停的链接上触发。 "你真的需要解释一下。这没有多大意义。
  • 我相信这意味着“我有多个超链接。将鼠标指针悬停在其中任何一个上时,都会触发一个事件。事件发生时采取的操作必须只影响 / 是的超链接不是/在鼠标指针下。” ...尽管其他人可能会更好地改写它。

标签: jquery event-handling observer-pattern


【解决方案1】:

给每个链接一个 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>

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多