2016-11-27 59 views
0

我有一個方案,在父容器上點擊應打開一個隱藏的div。但是,當點擊位於同一個父容器中的錨或按鈕時 - 它們的自然行爲應該發生,而不是內部div的打開/關閉。有行動發生onclick父,但不是特定的孩子

HTML:

<div id="row1" class="ticketRow alert"> 
    <div class="btn-group actionButtons"> 
    <button data-toggle="dropdown" class="btn btn-primary dropdown-toggle btn-default">Menu <span class="caret"></span></button> 
    <ul class="dropdown-menu"> 
     <li><a href="javascript:;" data-action="close">Task 1</a></li> 
     <li class="divider"></li> 
     <li><a href="javascript:;" data-action="pending">Task 2</a></li> 


    </ul> 
    </div> 

    <div class="ticketMeta">Ticket Meta</div> 

    <a class="btn" href="javascript:alert('hello');">text link</a> 
</div> 

的Jquery:

$(".ticketRow").on("click", function() { 
    $(this).find(".ticketMeta").slideToggle(); 
}); 
$(".ticketRow .btn").click(function(e) { 
    e.stopPropagation(); 
}); 

所以會發生什麼是代碼,是找工作的<a>錨,而不是下拉/按鈕。即當你點擊按鈕 - 沒有任何事情發生(一切都被阻止),什麼時候會發生,只有菜單纔會打開。 正因爲如此,這個jQuery上面似乎是寫在非經濟的方式,被視爲它解析每次點擊都一段代碼(我假設,對不對?)

的jsfiddle:https://jsfiddle.net/kneidels/24de8rLz/2/

感謝

回答

2

您可以簡單地修改您的父容器事件偵聽器的事件處理程序,如下所示。

if(event.currentTarget.id == event.target.id){ 
    $(this).find(".ticketMeta").slideToggle(); 
} 

這應該可以解決您的問題。

,並刪除

e.stopPropagation(); 
+0

這是你的意思? https://jsfiddle.net/kneidels/24de8rLz/4/ – kneidels

+1

是的,這就是我的意思,希望這會解決你的問題 –

相關問題