javascript - 如果用户单击该行上的折叠按钮,如何禁用整行的 onclick?
问题描述
window.location
单击按钮后如何防止调用它?
<tr onclick="window.location='www.google.com'">
<td>Toggle Button</td>
<td style="text-align:left;">
<button class="btn btn-link text-info" data-toggle="collapse" data-target="#company@item.Id">
Details
</button>
<div id="myitems5" class="collapse">
items
items
items
</div>
</td>
</tr>
解决方案
最小变化的方式是这样的:
<tr onclick="if (!event.target.closest('button[data-toggle]')) { window.location = '//www.google.com'; }">
...这表示如果事件通过button
带有data-toggle
属性的 a 传递到tr
,则您不执行任何操作,但如果确实执行了此操作window.location
(请注意那里的字符串修复)。
但我不会那样做。我会使用适当的事件处理程序,可能是表中的一个委托,并在该事件处理程序中进行检查。
例如:
theTable.addEventListener(function(e) {
var tr = e.target.closest("tr");
if (tr && this.contains(tr)) {
var btn = e.target.closest("button[data-toggle]");
if (!btn || !tr.contains(btn)) {
window.location = "//www.google.com";
}
}
});
在这两种情况下,代码都使用了Element#closest
,您可能需要在过时的浏览器上进行 polyfill。
推荐阅读
- javascript - backgroundColor 没有做任何事情?
- sql-server - 日期字段上的批量错误,但插入作品 SQL Server
- reactjs - 确认标记仅在 react-native 中在折线上移动
- css - “@media (min-width: 900px)”是查看浏览器宽度还是显示器宽度?
- c# - 当我从中调用另一个异步方法时,异步方法缺少等待运算符消息?
- c - 使用 gets() 读取 char* 会导致“Core Dumped”错误(C 语言)
- google-apps-script - Google Apps 脚本 - SpreadsheetApp.openByUrl() 没有错误但不加载任何内容
- netsuite - 如何通过 Netsuite suitescript 2.0 中的 RESTlet 脚本获取捆绑信息?
- twitter-bootstrap - 轮播显示为单独的图像
- tcl - TCL - 在浮动值列表中选择第 n 项