Ereignis Blubbern zu verhindern, legt event.stopPropagation()
in der Prozedur für Ihr input
Click-Ereignis des Elements.
$('#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: Als @Pointy erwähnt, kann es Ihre Absicht, die gleiche sein Handler beide Ereignisse behandeln zu haben, oder zumindest die td
Handler noch feuern, wenn Sie klicken auf die input
.
Wenn das der Fall ist, müssen Sie nur überprüfen müssen, um zu sehen, ob die td
Handler durch einen Klick auf das input
gefeuert wurde, und wenn ja, verhindern, dass die input.trigger("click")
ab:
$('#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');
}
}
});
Ein anderer Weg, zu tun, würde der Test sein: Beide Ansätze
if(input[0] != evt.target) {...
davon ausgehen, dass es nur eine input
. Wenn dies nicht der Fall ist, müssen Sie der Eingabe eine Kennung geben, damit der Test spezifischer wird.
Ich benutze Firebug Konsole, so in meinem Fall funktioniert alles wie erwartet. – Marek