Недавно я оказался в ситуации, когда мне нужно было удалить функцию, связанную с событием изменения размера окна, медиа-менеджером 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];
})
Здесь я чередую события, удаляя из них пробелы, символы табуляции и новые строки, сравнивая их с тем, что я ищу, и когда я нахожу это, я выбрасываю его из проклятого воздушного шлюза. В этом случае бывает, что присоединенная функция, возможно, не имеет пробелов, табуляции или новых строк, но, насколько я могу судить, этот способ также работает с более сложными функциями.
Есть ли более простой и / или более элегантный способ сделать это? Это рецепт катастрофы в будущем?