<分区>
标签 javascript jquery html css
<分区>
Possible Duplicate:
jQuery - on() function when a div is clicked, but not when a child of that div is clicked
$(oTrPlanning).prev().children('td').each(function () {
this.onclick = setCountClick;
});
点击 TD setCountClick()
被调用,但 TD 还包含一个 Textbox
:
<td>
<input class="Input-InlineFilter" id="TextFirst" type="text" value="">
</td>
因此,当我开始在 Textbox
上键入内容时,将再次调用 setCountClick()
。
我想在点击 TD 时调用 setCountClick()
,而不是 Textbox
。
最佳答案
点击事件将 DOM 从 textbox
冒泡到 td
,一直到 body
。如果您不希望 textbox
点击触发 td
点击处理程序,您需要停止冒泡:
$('#TextFirst').click(function (e) {
e.stopPropogation();
});
Documentation for stopPropagation
要扩展,您应该利用此冒泡为所有 td
仅绑定(bind) 一个 事件处理程序:
// bind one handler to all tds
$(oTrPlanning).prev().on('click', 'td', function (e) {
// ensure the clicked element is a TD
if (this.nodeName === 'TD') {
setCountClick(e);
}
});
请注意,如果您在 setCountClick
中的任何位置依赖 this
运算符,它可能不再按预期工作。要解决此问题,您需要在调用 setCountClick
时考虑使用 $.proxy
或 bind
:
setCountClick.bind(this)(e);
bind
返回一个新函数,该函数使用您传递的参数作为新函数内的 this
参数。然后执行该函数并将常规参数传递给它。
关于javascript - 在点击 td 时,点击文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238363/