Распространение событий клика Jquery - PullRequest
15 голосов
/ 11 февраля 2010

У меня есть таблица с событиями кликов, привязанными к ее строкам (<tr>). Внутри этих строк есть <a> элементов с назначенными им собственными событиями клика.

Проблема в том, что когда я щелкаю элемент <a>, он также запускает событие click из родительского элемента <tr>. Я не хочу такого поведения; Я просто хочу запустить событие <a> click.

Код:

 // Event row TR

 $("tr:not(:first)").click(function() {
    $(".window, .backFundo, .close").remove();

    var position = $(this).offset().top;
    position = position < 0 ? 20 : position;

    $("body").append( $("<div></div>").addClass("backFundo") );
    $("body").append( $("<div></div>").addClass("window")
         .html("<span class=close><img src=Images/close.png id=fechar /></span>")
      .append( "<span class=titulo>O que deseja fazer?</span>"
              +"<span class=crud><a href=# id=edit>Editar</a></span>"
              +"<span class=crud><a href=# id=delete codigo=" 
              + $(this).children("td:first").html() 
              + ">Excluir</a></span>" )
       .css({top:"20px"})
       .fadeIn("slow") );

    $(document).scrollTop(0);
 });

 // <A> Element event

 $("a").live("click",function() { alert("clicked!"); });

Каждый раз, когда вы нажимаете на якорь, он запускает событие из родительской строки. Есть идеи?

Ответы [ 2 ]

26 голосов
/ 11 февраля 2010

Вы должны остановить всплытие событий. В jQuery вы можете сделать это по

e.stopPropagation();

в событии onclick тега привязки.

$("a").live("click",function(e){alert("clicked!");e.stopPropagation();});

Редактировать

Посмотреть это сообщение

jquery Event.stopPropagation (), кажется, не работает

3 голосов
/ 26 июля 2011

Я бы использовал bind вместо live для <tr> и <a> и следующий код

$("a").bind("click", function(e){ alert("clicked!"); e.stopPropagation() });

для <a>.

Все <a href> будут работать должным образом, а код обработчика событий <tr> не будет выполняться после нажатия <a>.

Работает во всех современных браузерах.

...