Лучший способ поиска событий? - PullRequest
4 голосов
/ 28 февраля 2010

Недавно я оказался в ситуации, когда мне нужно было удалить функцию, связанную с событием изменения размера окна, медиа-менеджером WordPress (media-upload.js), потому что это мешало правильному использованию Thickbox. Событие прикрепляется так:

a(window).resize(function(){tb_position()})

Это заняло у меня некоторое время, но я наконец понял, что могу сделать это следующим образом:

jQuery.each( jQuery(window).data('events')['resize'], function(i, event) {
    var thisEvent = event.toString().replace(/\n/g, '').replace(/\t/g, '').split(' ').join('');
    var expectedEvent = 'function(){tb_position()}';

    if (thisEvent == expectedEvent)
        delete jQuery(window).data(‘events’)[‘resize’][i];
})

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

Есть ли более простой и / или более элегантный способ сделать это? Это рецепт катастрофы в будущем?

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Другим способом может быть использование системы WordPress для постановки в очередь / удаления из очереди или регистрации / отмены регистрации скриптов. Отмените регистрацию media-upload.js, а затем поставьте в очередь свою собственную версию.

Прем

1 голос
/ 28 февраля 2010

Когда вы регистрируете обработчик для события, вы можете использовать квалификатор:

$('#something').bind('click.removeMeSomeday', function() { ... });

Тогда, когда вам нужно удалить его, вы можете сделать это, не мешая другим обработчикам «щелкнуть».

Теперь мне приходит в голову, что вы не сможете повлиять на то, как Wordpress связывает свой обработчик событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...