Инициировать событие для всех слушателей, кроме самого триггера. - PullRequest
0 голосов
/ 05 декабря 2010

У меня есть пара ссылок, привязанных к пользовательскому событию.Событие запускается при наведении любой из этих ссылок.Однако я не хочу, чтобы это сработало на ссылке, которую я на самом деле нашел.

Я могу вспомнить пару возможных решений

  1. Я поставил "если"в функции обратного вызова для события и каким-то образом проверить, является ли инициирующий объект объектом, пытающимся запустить функцию обратного вызова и соответственно обработать t.Можно ли сравнивать объекты удобным и эффективным способом?

  2. Временно отсоедините прослушиватель объекта, инициирующего событие, а затем снова свяжите его.Это не звучит пуленепробиваемо, так как событие может быть восстановлено до того, как оно действительно было запущено?Я не уверен, как эти типы очередей событий обрабатываются.Повлияет ли jquery.trigger на всех слушателей перед выполнением следующего оператора?Другим недостатком является то, что это может считаться взломом вместо хорошей практики?Ваше мнение?

  3. Пропустите всю функцию триггера событий-привязок и просто соберите каждый объект в массиве и позвольте функции обратного вызова hover повторить эту операцию, делая все, что я захочу.Я думаю, это на самом деле что-то вроде того, что на самом деле происходит за кулисами в приведенных выше сценариях

Существует ли распространенная практика для решения этой проблемы?Возможно, что-то в схеме наблюдателя?

1 Ответ

0 голосов
/ 06 декабря 2010

Дайте каждой из ссылок идентификатор и класс.Когда мышь входит в активную область одной из ваших специальных ссылок, запустите свое настраиваемое событие для всех из них с идентификатором ссылки, над которой находится мышь.Попросите ваш пользовательский обработчик событий проверить, чтобы убедиться, что этот идентификатор не совпадает с идентификатором ссылок, которые получают уведомление о событии.

<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>
...