#9

Интересная штука получается. Раньше, чтобы повесить событие на ещё не существующий элемент, надо было написать

$('.selector').live(function () {});

Теперь такая простая и удобная штука не работает. Теперь нужно использовать метод .on, который, как оказалось, сложнее в понимании.
Даже если использовать документацию и написать так

$('.selector').on('mouseenter', function() {})

функция не выполнится, когда вы от неё этого будете ожидать. Задница кроется в том, что теперь .selector – это обёртка. Вы можете вешать на неё, но только если она уже есть в dom’e.
Если у вас на странице пока не существует элемента, на который вы хотите повесить функцию, то придётся писать так

$('.selector').on('mouseenter', '.element', function () {})

Как вам такой синтаксис? Мне, например, не очень.
На досуге надо будет покапаться в фреймворке, разобраться почему так получается и для чего так сделали.

P.S. В документации это объясняется тем, что события всплывают от низа к верху, поэтому когда мы кликаем на элементе, который появился после инициализации, событие всплывает до элемента, к которому было привязано событие через .on и на нём срабатывает. Это помогает избежать чересчур частых биндов/анбиндов событий на элементах, которые появляются динамически.

Share
Send
2013   javascript   jquery
← Ctrl →
Popular