Где хранятся обработчики событий Javascript?
Я пытаюсь выяснить, как DOM отслеживает обработчики событий, будь то связанные с помощью jQuery, addEventListener или атрибутом HTML (например, onload="myFunc()").
Я читал, что jQuery использует .data () способ хранения обработчиков событий, связанных jQuery... а как же остальные? Куда они направляются? Я знаю, что инструмент инспектора Webkit показывает прослушиватели событий, проверяя элемент на вкладке "элементы", но где он получает это информацию?
кстати, в некоторых тестах с использованием веб-инспектора Chrome я использовал консоль для замены версии jQuery на живом сайте на более новую, потянув <script>
тег, таким образом переопределяя jQuery
и $
переменные. Очевидно, что события, связанные с использованием jQuery до замены, были потеряны, потому что новый .в процессе был введен интерфейс data ().
те обработчики, которые "потеряны", однако, все еще связаны с определенными событиями, потому что они на самом деле в конечном итоге вызывается при возникновении события. Предположим, я хочу полностью удалить их или заменить своими собственными обработчиками? Вот почему я хотел бы знать, как получить доступ к фактическим обработчикам, где бы дом их ни держал... и без jQuery.
1 ответов
относительно таких методов, как addEventListener
, они не видны непосредственно в обычном коде JavaScript. Они хранятся внутри.
что касается встроенных обработчиков, они просто хранятся непосредственно на элементе DOM, как типичный обработчик, так что это:
<a href="#" onclick='alert("foo");'>click</a>
эффективно становится этот:
a_element.onclick = function(event) { alert("foo"); };
(более старый IE не включает , вы фактически осиротели этих обработчиков. Вы не можете удалить обработчик, связанный с addEventListener
Если у вас нет ссылки на этот обработчик. Поскольку универсальный обработчик jQuery также хранился в jQuery.cache
, нет никакого способа развязать его, если вы не уничтожите сам элемент.
я не помню конкретно, имеет ли универсальный обработчик ссылку на jQuery.cache
или только часть его. Ссылка это не повлияет на сколько дырявый данных может быть.