#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть следующий UL:
<ul class="xbreadcrumbs" style="position:absolute; bottom:0px">
<li><a href="someURL">A Crumb</a></li>
</ul>
Это динамически создается моим javascript. Как я могу переопределить щелчок для каждого LI, который находится внутри UL с именем xbreadcrumbs в jQuery, и заставить его что-то делать вместо перехода к новой гиперссылке?
Кроме того, как я могу заставить поведение отличаться для каждого li?
Обновлено:
$.each('.xbreadcrumbs li', function(){
$(this).live('click',function(e){
e.stopPropagation();
console.log('clicked for each li');
});
});
Комментарии:
1. Под переопределением вы имеете в виду запретить ему что-либо делать или запускать функцию?
2. Чтобы предотвратить запуск элемента a, посмотрите на return false или preventDefault . Чтобы прикрепить событие щелчка jQeury к динамическому элементу, используйте функцию live() .
3.
e.stopPropagation
вероятно, должно бытьe.stopPropagation()
Ответ №1:
Live — это часть ответа, другая часть ответа заключается в том, что вам нужно использовать свойство события target
, чтобы узнать, какой элемент был фактически нажат.
$('.xbreadcrumbs li').live('click', function(e){
e.preventDefault();
console.log('Clicked on element', e.target);
});
Ответ №2:
После того, как вы добавите ul
динамически в DOM, вы можете подписаться на .click()
событие внутреннего lis
:
$('.xbreadcrumbs li').click(function() {
// do something when the li is clicked
});
Комментарии:
1. как я могу добавить щелчок к каждому отдельному li? у каждого будет какая-то логика, чтобы делать что-то другое..
Ответ №3:
вам нужно будет использовать функцию .live(), чтобы динамически создаваемые элементы прикрепляли событие…
$("ul.xbreadcrumbs li").live("click", function() {
//do something
}
Ответ №4:
Используйте живое событие:
$('.xbreadcrumbs li').live('click', function(){
//override here
});
Ответ №5:
Поскольку </ul>
он добавляется динамически, лучше всего использовать $.live() или $.delegate() следующим образом:
$('.xbreadcrumbs li').live('click', function(e){
e.stopPropagation();
console.log('Clicked');
});
Надеюсь, это поможет!
Комментарии:
1. Событие щелчка связано, но оно все равно приводит меня к гиперссылке. например.stopPropagation(), похоже, не работает в этом случае?
2.
stopPropagation()
не останавливает действие события по умолчанию (навигацию), вы должны использоватьpreventDefault()
или возвращать false из обработчика.3. Функция preventDefault() сделала свое дело. Я также понял, что, хотя это получает щелчок для li, как я могу получить КАЖДЫЙ li? Я хотел бы напечатать что-то другое для каждого LI