2010-02-11 1 views
15

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

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

Код:

// 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!"); }); 

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

ответ

26

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

e.stopPropagation(); 

в событии onclick анкера.

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

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

Увидеть этот пост

jquery Event.stopPropagation() seems not to work

+0

нет, что не совсем. Я уже пробовал это. Ничего не происходит. – ozsenegal

+0

Можете ли вы разместить свою разметку HTML? – rahul

+0

У меня нормальная таблица. Затем я создаю новые якорные элементы промагаматически и добавляю к этим строкам. – ozsenegal

3

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

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

для <a>.

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

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