Quiero separar el evento de clic.
Todos los clics dentro de la etiqueta body
tienen que ser alertados "fuera de la mesa",
Excepto el evento click dentro de la clase postit-table
.
Este es mi código:
html
<table class="postit-table">
<tbody>
<tr class="postit-header">
<td>header</td>
</tr>
<tr>
<td><textarea class="postit-content"></textarea></td>
</tr>
</tbody>
</table>
css
.postit-table{
width: 200px;
height: 200px;
background-color: yellow;
}
javascript (jquery):
$("body").bind('click',':not(".postit-table,.postit-table tbody, .postit-table tr, .postit-table tbody tr td")', function (e) {
alert("clicked outside table!");
});
$(".postit-table").click(function(){
alert("clicked inside table!");
});
jsfiddle:
Desafortunadamente, si ejecuta la aplicación Fiddle, todavía llama al evento de clic de la tabla externa :(
Alguien puede ayudar?
4 respuestas
Utilice stopPropagation()
en el evento de clic postit-table
: al hacerlo, el evento click no se propagará burbujeando hasta el elemento body
Ejemplo: http://jsfiddle.net/e5jph1Lt/
$("body").on('click', function() {
alert("clicked outside table!");
});
$(".postit-table").on('click', function(evt) {
evt.stopPropagation();
alert("clicked inside table!");
});
Como nota al margen, use on()
en lugar de bind()
si usa una versión reciente de jQuery
Uso
e.stopPropagation();
Código
Impide que el evento forme burbujas en el árbol DOM, evitando que los controladores principales sean notificados del evento.
Árbitra.
http://api.jquery.com/event.stoppropagation/
Resuelta
$("body").bind('click',':not(".postit-table,.postit-table tbody, .postit-table tr, .postit-table tbody tr td")', function (e) {
alert("clicked outside table!");
});
$(".postit-table").click(function(e){
e.stopPropagation();
alert("clicked inside table!");
});
También intente para esto tiene otra solución. Trucos
Parece demasiado complicado para mí. Como ya respondieron otros, puede usar event.stopPropagation
y simplificar su código. Algo como:
$(document).on('click', clickedoutside);
$('body').on('click', '.postit-table', clicked);
function clicked(e){
e.stopPropagation();
alert('clicked inside table!');
};
function clickedoutside(e){
alert('clicked <b>outside</b> table!');
};
Aquí está su jsFiddle reescrito
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.