2010-02-11 145 views
15

我有一個表單擊事件綁定到其行(<tr>)。這些行內有<a>個元素,並分配了自己的點擊事件。Jquery單擊事件傳播

問題是,當我點擊<a>元素時,它也會觸發父<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 2010-02-11 12:27:24

+0

你能發佈你的HTML標記嗎? – rahul 2010-02-11 12:29:41

+0

我有一個普通的table.Then我promagamatically創建新的錨點元素,並追加到該行。 – ozsenegal 2010-02-11 12:33:28

3

我會用bind,而不是live兩個<tr><a>和下面的代碼

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

<a>

全部<a href>的按預期工作,<tr>事件處理程序代碼在點擊<a>後不會執行。

適用於所有現代瀏覽器。