2011-05-17 45 views
6
$("div#foobar").live('click', function() { 

}); 

$(window).hashchange(function() { 

}); 

我該如何停止射擊hashchange事件發生時click事件觸發。如何停止jQuery中的事件傳播?

注意 在點擊事件我發射ajax和改變散列......並在hashchange我正在做的事情。由於Click事件也會更改散列,所以hashevent會觸發。所以,我希望每當點擊事件觸發hashchange不應該被激發。

+0

感謝您的提問,我不知道live()方法有多棒,我只知道bind()。 – Sid 2011-05-17 22:18:11

+6

@SidCool:如果你認爲那真棒,也可以看看['delegate()'](http://api.jquery.com/delegate/)。它比'live()'更有效率。 – Town 2011-05-17 22:20:05

+2

當你點擊div時會發生什麼?散列在哪個階段改變了?提供更多的上下文將是最有幫助的。 – karim79 2011-05-17 22:20:24

回答

0
(function() { 

    var fire_hashchange = true; 

    $("div#foobar").live('click', function() { 
     fire_hashchange = false; 
     // do stuff 
    }); 

    $(window).hashchange(function() { 
     if (!fire_hashchange) { 
      fire_hashchange = true; 
      return; 
     } 
     // do stuff 
    }); 
})(); 
10

停止傳播並防止默認行爲。

$("div#foobar").live('click', function(event) { 
    event.stopPropagation(); 
    event.preventDefault() 
}); 
1

基本上,你不能做你想做的事情。如果你正在改變散列,當然hashchange事件將被解僱。這就是它的目的。防止click事件的傳播不會阻止處理hashchange事件。

設計您的系統,使其不成問題。