2015-12-26 2 views
2

Мне нужно добавить класс к элементу «на лету». Но после добавления класса все события, связанные с этим классом, работают только с элементами, чьи классы уже были определены при загрузке документа.Триггерные события из классов, назначенных впоследствии

Рассмотрите этот пример.
Text 1 еще не имеет класса, а Text 2. Когда нажимается кнопка, myClass присваивается Text 1, поэтому оба текста и текст 2 теперь относятся к классу myClass.
При щелчке элемента myClass появляется окно предупреждения, но это событие запускается только при нажатии Text 2. Элемент, класс которого уже был определен при загрузке документа.

<button>Add class to Text 1</button><br /> 
<a href="#">Text 1</a> <br /> 
<a href="#" class="myClass">Text 2</a> 

<script> 
$(document).ready(function() { 
    $("button").click(function() { 
    $("a").addClass("myClass"); 
    }); 
    $(".myClass").click(function() { 
    alert("clicked!"); 
    }); 
}); 
</script> 

Вот скрипку: https://jsfiddle.net/zx8wuy97/

+0

Других ссылки на эту тему: [JQuery .live() против методы .А() для добавления события нажатия кнопки мыши после загрузки динамического HTML] (http://stackoverflow.com/questions/8752321/jquery -live-vs-on-method-for-add-a-click-event-after-load-dynamic-ht/8752376 # 8752376) и [обработчики событий jQuery - лучший метод] (http://stackoverflow.com/вопросы/9730277/JQuery-EVENT-обработчики-Что-The-лучший метод/9730309 # 9730309). – jfriend00

ответ

1

Одним из вариантов было бы использовать event delegation. При этом событие привязывается к постоянному родительскому элементу, а класс элемента-потомка проверяется, когда событие действительно запущено (а не при подключении события).

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

Updated Example

$(document).on('click', ".myClass", function() { 
    alert("clicked!"); 
}); 
1
$(".myClass").click(function() { 
    alert("clicked!"); 
}); 

// Is the same as: 

$("body").on("click", ".myClass",function() { 
    alert("clicked!"); 
}); 

Как динамически загруженного содержимого, это исправление сказал проблема.

In jQuery, how to attach events to dynamic html elements?

Смежные вопросы