2012-04-25 34 views
2

考慮下面的HTML片段:使用JQuery,我該如何停止傳播DOM的點擊事件?

<li class="list"> 
    <img src="/assets/img/site/arrow_black.png"/>My List Element<span class="star"></span> 
</li> 

當我點擊事件綁定到li元素,並綁定一個click事件到.star類,我的問題是:

我如何當我點擊明星時,停止點擊事件li發射?

我的jQuery代碼看起來沿着線的東西:

$(".list").click(function() { 
//do something 
} 

$(".star").click(function() { 
//do something 
} 
+0

可能重複[Javascript/jQuery單擊元素內的元素](http://stackoverflow.com/ques tions/3408138/javascript-jquery-click-element-within-element) – 2012-04-25 12:52:44

+0

和許多其他的,例如http://stackoverflow.com/questions/1164213/how-to-stop-event-bubbling-on-checkbox-click和http://stackoverflow.com/questions/3460197/jquery-disabling-click-function-on-父元素/ 3460215#3460215 – 2012-04-25 12:54:31

+0

大聲笑,也許jQuery需要更多的文檔呢? – SpYk3HH 2012-04-25 13:03:55

回答

10

jQuery.stopPropagation()

$(".star").click(function(e) { 
    e.stopPropagation(); 
    // do work 
} 
+0

大聲笑,哇,以爲我會在那裏第一,猜我在我的晚年開始慢,ty @RoryMcCrossan – SpYk3HH 2012-04-25 12:51:44

+3

+1是第一個舉出一個沒有錯誤的例子的例子。 – 2012-04-25 12:51:44

0

您可以使用事件代表團..

應用事件偵聽器UL

document.getElementById("parent-list").addEventListener("click",function(e) { 

if(e.target && e.target.nodeName == "LI") { 
    var classes = e.target.className.split(" "); 

    if(classes) { 

     for(var x = 0; x < classes.length; x++) { 

     if(classes[x] == "star") { // do your thing 
            } 
        } 
      } 
    } 
}); 

}); 

或者只是使用了preventDefault明星類