Подтвердить что ты не робот

События jQuery click не запускаются в шаблонах AngularJS

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

Я использую jQuery 2.0.3 и AngularJS.

Если у меня есть якорь в index.html, например:

# index.html
<a href="#" class="clickme">Click Me</a>

<script type="text/javascript">
$(function() {
    $('.clickme').click(function() { console.log("click"); });
});
</script>

Затем он работает, и когда я нажимаю на него, он выводит 'click'. Но когда я помещаю это внутри шаблона, который я включаю с атрибутом ng-include, jQuery внезапно не срабатывает. Если я размещаю script внутри шаблона с привязкой, но он имеет огонь.

# index.html
<div ng-include="'path/to/template.html'"></div>

# template.html
<a href="#" class="clickme">Click Me</a>

<script type="text/javascript">
$(function() {
    $('.clickme').click(function() { console.log("click"); });
});
</script>

Это также относится к использованию директив, которые используют шаблоны. Это странно и вызывает у меня много хлопот с некоторыми выпадающими меню.

Кто-нибудь знает, почему это происходит?

4b9b3361

Ответ 1

Поскольку ваш clickme, вероятно, недоступен в DOM ready, скорее, он помещается в DOM на Angular при загрузке template.html - вам нужно использовать делегирование событий jQuery вместо использования .click:

$(document).on("click", ".clickme", function() {
  console.log("click");
});

Это обеспечит привязку jQuery к документу, а затем отслеживает любые события кликов на элементах с классом clickme.