BlahBlag01
@BlahBlag01

Как повесить событие на подгружаемые ajax'ом элементы?

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

<a href="/ad/{{ $ad->id }}" class="ad" data-id="{{ $ad->id }}">
						<div class="preview">
							{{ HTML::image("/images/bulletins/$images[0]", "$ad->title") }}
						</div>
						<div class="title">
							{{ $ad->title }}
							<span>Lorem ipsum.</span>
						</div>
						<div class="price">{{ $ad->price }} руб.</div>
						<div class="date">
							<time class="timeago" datetime="{{ $ad->created_at }}"></time>
						</div>
						<div class="star fav" data-id="{{ $ad->id }}"><img src="assets/star.png"></div>
				</a>


$(document).on("click", ".fav", function(){
			$(document).on("click", ".ad-append a", function(e) {
				e.preventDefault();
				console.log("okay");
			});
		});
  • Вопрос задан
  • 6097 просмотров
Пригласить эксперта
Ответы на вопрос 3
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Не надо заворачивать on в on.

Чтобы повесить обработчики на все элементы ".ad-append a", которые появятся на странице, достаточно:
$(function(){
  $(document).on("click", ".ad-append a", function(e) {
    e.preventDefault();
    console.log("okay");
  });
});
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ответ написан
Комментировать
@shearlocktm
Используйте live
// было бы, если бы контент элемента #main не подгружался AJAX'ом
$('#main a').click(function(event){
    console.log($(this).attr('href'));
    return false; // отменяем действие по умолчанию и всплытие события
});
 
// теперь предположим, что контент элемента #main подгружается AJAX'ом
// вносим минимум изменений в предыдущий код
$('#main a').live('click', function(event){
    console.log($(this).attr('href'));
    event.preventDefault(); // отменяем действие по умолчанию, но не трогаем bubbling - чтобы не мешать другим обработчикам
});


Подробнее тут
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы