2017-04-03 15 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の末尾には、ドロップダウントグルがあります。これは、trイベントをトリガーするべきではなく、ドロップダウンを開くだけです。クリック可能なtrのドロップダウントグル

私はevent.stopPropagation()を使用してhrefイベントを防止しようとしましたが、これもトグルイベントを強制終了します。私は$(this).dropdown( "toggle")を使ってトグルイベントを再開しましたが、これは単純な動作のために複雑すぎると感じました。

簡単な方法はありますか?

+0

$(this).dropdown();偽を返します。 2行のコードでhrefを防止でき、ALMOSTが正常に動作します。つまり、トグルを最初にクリックしても何も起こらず、2回目のクリックが正常に機能した後に...なぜですか? – 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をテーブル外にプルする必要があります。

さらに1つのトリックは、イベントをtdにサブスクライブし、tdをドロップダウンを解除したままにします。

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

ありがとうございます!これは良い解決策ですが、すべての行にlist-element class = "dropdown-menu"がありますので、クリックするたびにすべてのドロップダウンが表示されます:) $(これ))を試しましたが、 – abchacker

+0

$(this).siblings( '。dropdown-menu')。toggle();トリックに向かうだろう。または '$(this).parent()。find( '。dropdown-menu')。toggle();'これは基本的に同じことです。 – Samich

+0

ありがとう!ありがとう!残っている唯一のものは、私がページのどこかをクリックしてドロップダウンを閉じることができるすべてのjavascriptを追加する前です。今私はそれを閉じるためにトグルをクリックする必要があります。良いアイデアは残っていますか? :) – abchacker

関連する問題