working not immediate event and javascript jquery preventdefault stoppropagation

not - preventdefault javascript



event.preventDefault vs event.stopPropagation (3)

Evento preventDefault De W3C:

El método event.preventDefault () detiene la acción predeterminada de un elemento para que no ocurra. Por ejemplo:

Impedir que un botón de envío envíe un formulario Impedir que un enlace siga la URL

Event stopPropagation De W3C :

El método event.stopPropagation () detiene la propagación de un evento a los elementos principales, lo que impide que se ejecuten los controladores de eventos principales.

Esta pregunta ya tiene una respuesta aquí:

Alguien puede explicar cuál es la diferencia entre event.preventDefault() y event.stopPropagation() ?

Tengo una tabla y dentro de esa tabla tengo una etiqueta img.

Cuando hago clic en la etiqueta img, quiero ver una ventana emergente.

Pero también quiero detener la selección de varias filas, así que uso:

$("table.items tbody tr").click(function(event) { event.stopPropagation(); });

Cuando uso el código js, ​​no aparece la ventana emergente;

Si borro el código js, ​​la ventana emergente funciona.

$(".info").live("click",function(e){ //console.log(''ok''); e.stopPropagation(); var elem = $(this); var id = $(this).attr("id").replace("image_","container_"); $(''#''+id).toggle(100, function() { if($(this).css(''display'') == ''block'') { $.ajax({ url: "$url", data: { document_id:elem.attr(''document_id'') }, success: function (data) { $(''#''+id).html(data); } }); } }); });

¿Por qué?


No soy un experto en Javascript pero por lo que sé:

stopPropagation se utiliza para asegurarse de que el evento no haga stopPropagation la cadena. p.ej. un clic en una etiqueta <td> también activaría eventos de clics en su <tr> , y luego en su <table> padre, etc. stopPropagation evita que esto suceda.

preventDefault se utiliza para detener la acción normal de un elemento, por ejemplo. preventDefault en un controlador de clic en un enlace detendría el enlace que se está siguiendo, o en un botón de envío dejaría de enviar el formulario.


  • stopPropagation en un niño evitará que ese evento suceda en el padre (todos los ancestros)
  • preventDefault en un niño detendrá el evento en el niño, pero ocurrirá en su padre (¡y también en los antepasados!)

Ahora en tu código cual es el padre? cual es el niño img is child tr es padre (bueno, abuelo para ser honesto), así que adivina dónde debería estar el código de stopPropagation .