Вопрос о распространении jQuery - PullRequest
1 голос
/ 26 октября 2011

еще один глупый вопрос, я не могу понять это через все остальные темы, так что, надеюсь, кто-то здесь может.

Демонстрация на http://jsfiddle.net/OwenMelbz/PaAt2/

В принципе, у меня так получилось

when click inside document
spawn div

when click div
do nothing

when doubleclick div
do this

в тот момент, когда я дважды щелкаю по нему, он запускает код, но также порождает другой div, где я щелкаю по элементу.

мой код на jsfiddle, как я писал выше!

спасибо

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Не знаю почему, но у меня это сработало.http://jsfiddle.net/PaAt2/4/. Возможно, это связано с тем, как в реальном времени обрабатываются события и привязка.

1 голос
/ 26 октября 2011

Кит прав, что его решение работает из-за разницы между работой live () и bind ().

bind () присоединяет ваш обработчик событий ко всем элементам DOM в объекте jQuery, к которому он вызывается. live () присоединяет обработчик события из jQuery к «контексту события» (дополнительную информацию ищите http://api.jquery.com/live). По умолчанию это корень дерева DOM. Этот обработчик событий отслеживает события, которые заполняют (или распространяются) объекты DOM внутри объекта, с которым он связан. Когда он его перехватывает, он смотрит, что вызвало событие, и, если он совпадает с селектором объекта jQuery, к которому был применен live (), он запускает аргумент функции, который вы указали в качестве обработчика события.

Это означает, что если у вас есть контейнер (в данном примере это «# project-wrap») и вы привязываетесь к его событию click, вы, как правило, будете получать клики, происходящие из чего-либо внутри этого контейнера, поскольку они будут пузыриться до контейнер. Но если вы связываете событие с контейнером с помощью live (), вы будете получать только те клики, которые произошли из самого этого контейнера, т. Е. Щелчки из пустого пространства внутри контейнера, а не клики по содержимому внутри него.

...