Para evitar burbujeo caso, colocar event.stopPropagation()
en el controlador del evento click de su input
del elemento.
$('#places-view input').click(function(event) {
// This will prevent the click event from bubbling up and firing
// the click event on your <td>
event.stopPropagation();
// run the rest of your click code
});
http://api.jquery.com/event.stopPropagation/
EDIT: Como se ha señalado @Pointy, que puede ser su intención de tener el mismo manejador de manejar ambos eventos, o al menos tener el manejador td
todavía disparar cuando haces clic en input
.
Si ese es el caso, sólo tendrá que comprobar para ver si el manejador td
fue despedido por un clic en el input
, y si es así, evitar que el input.trigger("click")
se ejecute:
$('#places-view > tbody').find('td').click(function(evt) {
var td = $(this),
input = td.find('input');
console.log('click');
console.log(input.attr('disabled'), 'disabled');
if (! input.attr('disabled')) {
// If the target of the click was not the input,
// then trigger the click on the input
if(input.not(evt.target).length) {
input.trigger('click');
console.log('inner click');
}
}
});
Otra forma para hacer la prueba sería:
if(input[0] != evt.target) {...
Ambos enfoques asumen que hay una sola input
. Si ese no es el caso, deberá proporcionar un identificador para permitir que la prueba sea más específica.
Estoy usando la consola Firebug, por lo que en mi caso todo funciona como se esperaba. – Marek