2017-04-03 69 views
0
<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> 

我在表格中创建了可点击的tr元素,导致新页面。在每个tr中最后都有一个td,并带有一个下拉式切换,它不应触发tr事件,而只会打开下拉菜单。drop-switch in clickable tr

我试图通过使用event.stopPropagation()来防止href事件,但这也会杀死切换事件。所以我用$(this).dropdown(“toggle”)重新触发切换事件,但是我感觉这会变得太复杂以至于没有那么简单的行为。

有没有简单的方法?

+0

$(this).dropdown();返回false; 与2行代码我可以防止href和下拉几乎正常工作,这意味着第一次点击切换没有做任何事情,第二次点击后,它正常工作...为什么? – abchacker

回答

0

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(); 
}); 

您仍然需要更新到任何你想要你的下拉菜单做的。在我的情况下,我正在切换它的可见性。

此外,由于您的下拉本身位于表格中,因此您还需要终止每个元素的均匀传播。或者将表格拉出dropdown-menu

另一个诀窍是订阅事件到td并且保留td并取消订阅下拉菜单。

$('.clickable-row td:not(:last)').click(...); 
+0

谢谢!这是一个很好的解决方案,但每一行都有一个list-element class =“dropdown-menu”,所以现在每个下拉列表打开时,我点击一个:)我试图$(this).closest,但无法让它运行 – abchacker

+0

$(this).siblings('。dropdown-menu')。toggle();将诀窍。或'$(this).parent()。find('。dropdown-menu')。toggle();'这基本上是一样的东西。 – Samich

+0

相关知识谢谢!剩下的唯一一件事是:在我开始添加所有JavaScript之前,我可以点击页面上的任何位置并关闭下拉菜单。现在我必须点击切换关闭它。还有什么好主意? :) – abchacker