Как я могу переопределить щелчок каждого LI в jQuery?

#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