Để ngăn chặn sự kiện bọt, đặt event.stopPropagation()
trong handler cho sự kiện click input
yếu tố của bạn.
$('#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: Như @Pointy ghi chú khác, nó có thể là mục đích của bạn để có xử lý tương tự xử lý cả hai sự kiện, hoặc ít nhất là có xử lý td
vẫn bắn khi bạn bấm vào số input
.
Nếu đó là trường hợp, bạn sẽ chỉ cần phải kiểm tra để xem nếu xử lý td
đã bị sa thải bởi một nhấp chuột vào input
, và nếu như vậy, ngăn chặn sự input.trigger("click")
từ chạy:
$('#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');
}
}
});
Một cách khác để thực hiện thử nghiệm sẽ là:
if(input[0] != evt.target) {...
Cả hai cách tiếp cận này giả định rằng chỉ có một input
. Nếu đó không phải là trường hợp, thì bạn sẽ cần phải cung cấp cho đầu vào một định danh để cho phép thử nghiệm cụ thể hơn.
Tôi đang sử dụng bảng điều khiển firebug, vì vậy trong trường hợp của tôi, tất cả đều hoạt động như mong đợi. – Marek