2010-02-11 24 views
15

Ho una tabella con eventi click legati alle sue righe (<tr>). Ci sono elementi <a> all'interno di quelle righe con i loro eventi di clic assegnati.Propagazione evento click jQuery

Il problema è che, quando scatto sull'elemento <a>, spara anche l'evento click dal genitore <tr>. Non voglio questo comportamento; Voglio solo licenziare l'evento click <a>.

Codice:

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

Ogni volta che si fa clic su l'ancora spara evento da esso riga padre. Qualche idea?

risposta

26

È necessario interrompere il bubbling degli eventi. In jQuery puoi farlo da

e.stopPropagation(); 

nell'evento onclick del tag di ancoraggio.

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

Modifica

vedi questo post

jquery Event.stopPropagation() seems not to work

+0

no non è abbastanza. Ho già provato questo. Niente accade. – ozsenegal

+0

Puoi pubblicare il tuo markup HTML? – rahul

+0

Ho una tabella normale. Quindi creo i nuovi elementi di ancoraggio in modo promagamatico e aggiungo a quelle righe. – ozsenegal

3

userei bind invece di live sia per <tr> e <a> e il seguente codice

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

per <a>.

Tutti gli <a href> funzioneranno come previsto e il codice del gestore di eventi <tr> non verrà eseguito dopo aver fatto clic su <a>.

Funziona con tutti i browser moderni.