可点击 tr 中的下拉切换
dropdown-toggle in clickable tr
<tr class='clickable-row' data-href='details.html'>
...
<td>
<div class="ibox-tools">
<a class="dropdown-toggle doDropdown" data-toggle="dropdown">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu">
<li><a href="#">Delete</a></li>
</ul>
</div>
</td>
</tr>
...
<script>
$(".clickable-row").click(function() {
window.location = $(this).data("href");
});
$('.doDropdown').click(function( event ) {
$(this).dropdown();
return false;
</script>
我在 table 中创建了可点击的 tr 元素,这些元素会指向一个新页面。在每个 tr 中,末尾都有一个 td,带有下拉开关,它不应触发 tr 事件,而应仅打开下拉菜单。
我试图通过使用 event.stopPropagation() 来阻止 href 事件,但这也会终止切换事件。所以我用 $(this).dropdown("toggle") 再次触发切换事件,但我觉得这对于简单的行为来说会变得太复杂了。
有没有简单的出路?
event.stopPropagation()
确实有效。
html:
<table>
<tr class='clickable-row' data-href='details.html'>
<td>
some content here
</td>
<td>
<div class="ibox-tools">
<a class="dropdown-toggle doDropdown" data-toggle="dropdown">
<i class="fa fa-wrench">Action</i>
</a>
<ul class="dropdown-menu">
<li><a href="#">Delete</a></li>
</ul>
</div>
</td>
</tr>
</table>
脚本:
$(".clickable-row").click(function() {
//window.location = $(this).data("href");
alert('row click');
});
$('.doDropdown').click(function( event ) {
alert('dropdown click');
$('.dropdown-menu').toggle();
event.preventDefault();
event.stopPropagation();
//$(this).dropdown();
});
您仍然需要更新您想要对下拉菜单执行的任何操作。在我的例子中,我正在切换它的可见性。
此外,由于您的下拉列表本身位于 table 中 - 您还需要终止每个元素上的均匀传播.. 或者将 dropdown-menu
拉到 table.[=17 之外=]
另一个技巧是将事件订阅到 td
并取消订阅下拉菜单 td
。
$('.clickable-row td:not(:last)').click(...);
<tr class='clickable-row' data-href='details.html'>
...
<td>
<div class="ibox-tools">
<a class="dropdown-toggle doDropdown" data-toggle="dropdown">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu">
<li><a href="#">Delete</a></li>
</ul>
</div>
</td>
</tr>
...
<script>
$(".clickable-row").click(function() {
window.location = $(this).data("href");
});
$('.doDropdown').click(function( event ) {
$(this).dropdown();
return false;
</script>
我在 table 中创建了可点击的 tr 元素,这些元素会指向一个新页面。在每个 tr 中,末尾都有一个 td,带有下拉开关,它不应触发 tr 事件,而应仅打开下拉菜单。
我试图通过使用 event.stopPropagation() 来阻止 href 事件,但这也会终止切换事件。所以我用 $(this).dropdown("toggle") 再次触发切换事件,但我觉得这对于简单的行为来说会变得太复杂了。
有没有简单的出路?
event.stopPropagation()
确实有效。
html:
<table>
<tr class='clickable-row' data-href='details.html'>
<td>
some content here
</td>
<td>
<div class="ibox-tools">
<a class="dropdown-toggle doDropdown" data-toggle="dropdown">
<i class="fa fa-wrench">Action</i>
</a>
<ul class="dropdown-menu">
<li><a href="#">Delete</a></li>
</ul>
</div>
</td>
</tr>
</table>
脚本:
$(".clickable-row").click(function() {
//window.location = $(this).data("href");
alert('row click');
});
$('.doDropdown').click(function( event ) {
alert('dropdown click');
$('.dropdown-menu').toggle();
event.preventDefault();
event.stopPropagation();
//$(this).dropdown();
});
您仍然需要更新您想要对下拉菜单执行的任何操作。在我的例子中,我正在切换它的可见性。
此外,由于您的下拉列表本身位于 table 中 - 您还需要终止每个元素上的均匀传播.. 或者将 dropdown-menu
拉到 table.[=17 之外=]
另一个技巧是将事件订阅到 td
并取消订阅下拉菜单 td
。
$('.clickable-row td:not(:last)').click(...);