Пользовательское событие в jQuery, который не связывается с элементом DOM?

Как насчет этого?

// Take signed area of ABC.
// If negative,
//     Swap B and C.
// Otherwise,
//     Take signed area of ACD.
//     If negative, swap C and D.

Идеи?

49
задан Geuis 11 October 2009 в 21:13
поделиться

3 ответа

Вы можете инициировать настраиваемые глобальные события, подобные этому, в jQuery:

jQuery.event.trigger('mycustomevent', [arg1, arg2, arg3]);

Они будут запускаться для любого элемента.

Поскольку jQuery построен вокруг объектов DOM, вы должны привязать свои события к объектам DOM. Вероятно, вы можете найти способ привязать события и без элемента (вы это сделали), но это не поддерживаемая методология.

Как вы написали в своем собственном ответе, вы можете привязать свое событие к глобальному объекту DOM, если вы этого не сделаете. Я хочу привязать его к отдельному элементу страницы:

$(document).bind('mycustomevent', function (e, arg1, arg2, arg3) { /* ... */ });
43
ответ дан 7 November 2019 в 11:38
поделиться

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

Чтобы привязать настраиваемое событие:

$().bind('mycustomevent', function(){
    //code here
});

Кроме того, вы можете встроить данные в объект события, который позже станет доступным:

$({mydata:'testdata'}).bind('mycustomevent',function(){
    //code here
});
6
ответ дан 7 November 2019 в 11:38
поделиться

Вы по-прежнему можете произвольно запускать события и отвечать на них с помощью jQuery, даже если вы не знаете, к какому элементу их прикрепить. Просто создайте в своем документе элемент «получатель», к которому вы можете привязать все свои пользовательские события. Это позволяет вам управлять логикой обработки событий в одном месте для всех событий, не связанных с элементами.

$(document).ready(function() {

  $(body).append('<div id="receiver">');

  $("#receiver").bind("foo_event", function () {
    // decide what to do now that foo_event has been triggered.
  });

  $("#some_element").click(function() {
    $("#receiver").trigger("foo_event");
  });

});
3
ответ дан 7 November 2019 в 11:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: