У меня есть несколько HTML-элементов, которые отображаются функцией javascript на странице:
<a href="#" class="test1">Test</a>
<a href="#" class="test2">Test</a>
<a href="#" class="test3">Test</a>
Затем у меня есть еще один javascript, который я использую для создания функции при нажатии Test:
$(document).ready(function(){
$( ".test1" ).click(function() {
// Code here
});
$( ".test2" ).click(function() {
// Different code here
});
$( ".test3" ).click(function() {
// Different code here
});
});
Однако, поскольку вставленный HTML не загружается одновременно с загрузкой страницы (она динамически вставлена после), моя функция щелчка не фиксирует событие. Как я могу это решить?
Вам необходимо использовать делегированный обработчик событий:
$(document).ready(function(){
$(document)
.on('click', '.test1', function() {
// Code here
})
.on('click', '.test2', function() {
// Code here
})
.on('click', '.test3', function() {
// Code here
});
});
Обратите внимание, что для обеспечения наилучшей производительности document
должен быть изменен на ближайший статический родительский элемент, который доступен для загрузки DOM.
Вы можете сделать события клика "живыми", чтобы они привязывались к объектам, поскольку они были введены в dom. Просто измените.click(function() {....}); to.live('click', function() {....});
.live()
устарела. .on()
этого используйте .on()
.
Использовать .on()
Поскольку элементы добавляются динамически, вы не можете напрямую связывать события с ними. Поэтому вам нужно использовать Event Delegation.
$(document).on('click', '.test', function() { //code here });
Синтаксис
$( elements ).on( events, selector, data, handler );