复选框单击覆盖表行单击
Checkbox click overriding table row click
我在HTML表中有复选框,并在HTML表行上设置onclick事件。
当我点击表格行时,它会在我的脚本上启动一个函数
<table>
<tr onclick="sayHello('Hello World');">
<td><input type="checkbox" /></td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
</tr>
</table>
问题是,当我点击该行中的复选框时,它也会触发该行的onclick事件
如何防止这种情况发生?
您可以简单地添加复选框的onclick
事件来调用event.stopPropagation()
<input type="checkbox" onclick="event.stopPropagation();" />
参考编号:https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation
读起来不错http://javascript.info/tutorial/bubbling-and-capturing
var checkboxes = document.querySelectorAll("tr input");
for (var i = 0, l = checkboxes.length; i < l; i++) {
checkboxes[i].onclick = function(e) {
e.stopPropagation();
}
}
<table>
<tr onclick="alert('Hello World');">
<td><input type="checkbox" /></td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
</tr>
</table>
停止事件传播到表:
var checkboxes = document.querySelectorAll("tr input");
for (var i = 0, l = checkboxes.length; i < l; i++) {
checkboxes[i].onclick = function(e) {
e.stopPropagation();
}
}
您可以这样尝试:
http://jsfiddle.net/5jnfzy7o/
var c=document.getElementById('something')
c.addEventListener('click', function(){
event.stopPropagation(); //Stops event from bubbling up the DOM Tree
});
function sayHello(str){
alert(str);
}
对于HTML:
<table>
<tr onclick="sayHello('Hello World');">
<td><input type="checkbox" id="something"/></td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
</tr>
</table>
您刚刚面临事件冒泡:)
您必须使用stopPropagation事件的方法来停止传播。请参阅此处的示例。
您需要停止click事件的传播。
document.querySelector('input').addEventListener('click', function(evt) {
evt.stopPropagation()
})
您可以从有关stopPropagation的MDN文档开始,并阅读事件流以了解更多信息。
sayHello = function(whatToSay)
{
alert(whatToSay);
}
<table>
<tr onclick="sayHello('Hello World');">
<td><input type="checkbox" onclick="event.stopPropagation();" /></td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
</tr>
</table>
相关文章:
- 覆盖单击事件不起作用
- 阻止在单击和关闭覆盖菜单css时滚动正文
- 覆盖单击时关闭菜单需要双击而不是单击
- 如何查找导致preventDefault的原因,该preventDefault会覆盖正常的单击行为
- 单击Fancy Box覆盖按钮调用Ajax时,Ajax未按预期工作
- 复选框单击覆盖表行单击
- 触摸事件处理程序将覆盖单击处理程序
- 由于覆盖(仅限 IE9),单击 事件不起作用
- 在单击时覆盖锚点
- Internet Explorer 在 jQuery 鼠标向下处理程序中添加覆盖层后泄漏单击事件
- 引导日期时间选择器 - 覆盖单击日历图标事件
- 通过单击按钮覆盖 z 索引
- 如何使用 JavaScript 在单击按钮时覆盖动态创建的表的行值
- 如何单击未完全覆盖背景的对象,并在悬停时消失,同时通过窗口对象退出元素
- 使用特定于浏览器的右键单击上下文菜单覆盖特定于站点的JavaScript右键单击上下文菜单
- 如何通过单击页面关闭覆盖
- 如何覆盖剑道网格中的创建按钮单击
- 单击页面后,我想用函数的输出覆盖文档
- 单击时工具提示覆盖不会消失
- 表行单击覆盖复选框