2010-02-11 26 views
15

Tengo una tabla con eventos de clic vinculados a sus filas (<tr>). Hay <a> elementos dentro de esas filas con sus propios eventos de clic asignados.Jquery clic evento propagación

El problema es que cuando hago clic en el elemento <a>, también desencadena el evento de clic del elemento primario <tr>. No quiero este comportamiento; Solo quiero iniciar el evento <a> click.

Código:

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

Cada vez que hace clic en el anclaje se activa el evento de la misma fila padre. ¿Algunas ideas?

Respuesta

26

Debe detener el burbujeo del evento. En jQuery puede hacerlo por

e.stopPropagation(); 

en el evento onclick de la etiqueta de anclaje.

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

Edición

Ver este post

jquery Event.stopPropagation() seems not to work

+0

no, eso no es todo. Ya lo he intentado. No pasa nada. – ozsenegal

+0

¿Puedes publicar tu marcado de HTML? – rahul

+0

Tengo una tabla normal. Luego creo nuevos elementos de anclaje promagamáticamente y los anexo a esas filas. – ozsenegal

3

me gustaría utilizar en lugar de bindlive tanto para <tr> y <a> y el siguiente código

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

para <a>.

Todos <a href> funcionarán como se espera y el código del controlador de eventos <tr> no se ejecutará después de hacer clic en <a>.

Funciona en todos los navegadores modernos.

Cuestiones relacionadas