Таким образом, я столкнулся с частью о различии между jQuery, связывают () и живой () - http://msdn.microsoft.com/en-gb/scriptjunkie/ee730275.aspx - (Живой и раздел Let Die)
Связывать функция регистрирует обработчики событий в фактических элементах DOM, которые были выбраны, но живая функция регистрирует обработчики событий на документе.
Я использовал обе функции, таким образом, я получаю различие на практике т.е. .live ('щелчок', функция () {..}); будет стрелять во введенный узел JS, в то время как связывание эквивалентного не будет.
То, о чем я не знаю, является отношениями/различием между документом и DOM. Кто-либо может просветить меня?
Спасибо, Denis
«Документ», на который вы ссылаетесь, - это переменная window.document
, которую браузеры предоставляют в JavaScript, и является корневым узлом модели DOM. Помните, что DOM, как и ваш HTML-документ, представляет собой иерархию элементов.
В DOM события работают так: они передаются от вершины иерархии, документа, вниз к рассматриваемому элементу, позволяя каждому элементу между ними фиксировать событие. Затем они выполняют второй проход вверх по иерархии, называемый восходящей цепочкой. Упомянутые вами методы jQuery подключаются к фазе восходящей цепочки событий.
Подключившись к событию click
в документе, вы увидите все события click
для всех элементов, потому что все они проходят через корневой узел, документ. Затем jQuery фильтрует то, что вам нужно, на основе вашего селектора.
Если вы просто используете bind
, вы подключитесь к событиям для данных элементов, которые существуют в данный момент времени. Если вы позже добавите на страницу новые элементы, они не будут привязаны к обратному вызову.
Это не разница между документом и DOM. Это разница между объектом документа и отдельными объектами элемента DOM. Функция live
следит за всеми событиями в документе, и если объект, вызвавшую событие, соответствует селектору, он вызовет обработчик. С другой стороны, функция bind
следит за событиями, вызванными определенным объектом элемента (обработчик прикреплен к этому конкретному объекту). При удалении и повторном создании элемента он будет другим объектом и не будет иметь прикрепленного обработчика событий. Это означает, что вы должны знать, что представляет собой объект во время выполнения bind
.