Вы можете использовать 2 следующих метода, которые предоставляет jQuery:
Первый - это метод .live()
, а другой - .delegate()
.
ИспользованиеПервый очень прост:
$(document).ready(function() {
$("#dynamicElement").live("click", function() {
//do something
});
}
Как видите, первый аргумент - это событие, которое вы хотите связать, а второй - функция, которая обрабатывает событие.То, как это работает, совсем не похоже на «повторный рендеринг».Обычный способ сделать это ($("#dynamicElement").click(...)
или $("#dynamicElement").bind("click", ...)
) работает путем присоединения обработчика события определенного события к элементу DOM, когда DOM правильно загружен ($(document).ready(...)
).Теперь, очевидно, это не будет работать с динамически генерируемыми элементами, потому что они не присутствуют при первой загрузке DOM.
Способ .live () работает вместо того, чтобы присоединять обработчик вентиляции к DOMСам элемент, он присоединяет его к элементу document
, используя преимущество всплывающего свойства JS & DOM.).
Звучит довольно аккуратно, верно?Но есть небольшая техническая проблема с этим методом, как я уже сказал, он прикрепляет обработчик событий к вершине DOM, поэтому, когда вы щелкаете по элементу, ваш браузер должен проходить по всему дереву DOM, пока не найдет нужное событие.обработчик.Кстати, процесс очень неэффективный.И вот где появляется метод .delegate()
.
Давайте предположим следующую структуру HTML:
<html>
<head>
...
</head>
<body>
<div id="links-container">
<!-- Here's where the dynamically generated content will be -->
</div>
</body>
</html>
Итак, с помощью метода .delegate () вместо привязки обработчика события кВершина DOM, вы можете просто прикрепить его к родительскому элементу DOM.Элемент DOM, вы уверены, что он будет где-то выше динамически генерируемого контента в дереве DOM.Чем ближе к ним, тем лучше это будет работать.Итак, это должно сделать магию:
$(document).ready(function() {
$("#links-container").delegate("#dynamicElement", "click", function() {
//do something
});
}
Это был довольно длинный ответ, но я хотел бы объяснить теорию, лежащую в основе этого, ха-ха.
РЕДАКТИРОВАТЬ: Вы должны исправить свою разметку, она недопустима, потому что: 1) якоря не позволяют использовать атрибут значения, и 2) вы не можете иметь 2 или более тегов с одинаковым идентификатором.Попробуйте это:
<a class="removeLineItem" id="delete-1">Delete</a>
<a class="removeLineItem" id="delete-2">Delete</a>
<a class="removeLineItem" id="delete-3">Delete</a>
И чтобы определить, какой из якорей был нажати в значении щелкнул номер, связанный с якорем.