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

}); 

$(window).hashchange(function() { 

}); 

click olayları tetiklendiğinde hashchange olayını nasıl tetikleyebilirim? click olayı üzerindeJQuery'de bir olay yayımı nasıl durdurulur?

Not Bir ajax ateş ve karma değişen ... Ve hashchange ben şey yapıyorum ediyorum. Tıklama olayı aynı zamanda karma hashtarı da değiştirdiğinden. Bu yüzden, tıklama olayı yangın çıkmıyorsa, ateş açılmamasını istiyorum.

+0

sayesinde, sadece bağlama hakkında bildiği canlı() yöntemi ne kadar harika bilmiyordum(). – Sid

+6

@SidCool: Bu harika olduğunu düşünüyorsanız, ['delegate()'] (http://api.jquery.com/delegate/) de bir göz atın. Canlı() 'dan daha verimlidir. – Town

+2

Senin div tıklandığında ne olur? Karma hangi aşamada değişti? Daha fazla bağlam sağlamak en yararlı olacaktır. – karim79

cevap

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

Yayılmasını durdur ve varsayılan davranışı engelle.

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

Temel olarak, yapmak istediğiniz şeyi yapamazsınız. Eğer hash değiştiriyorsanız, elbette hashchange olayı kovulacak. İşte bunun için var. click olayının yayılmasını engellemek, hashchange olayının işlenmesini engellemez.

Sisteminizi, sorun olmaması için tasarlayın. soru için

İlgili konular