2011-05-27 12 views
16

Sayfamda, tıklama etkinliklerine yanıt veren çok çeşitli öğeler var. Bazı küresel bayrağa dayalı tüm tıklamaları engellemem gereken zamanlar vardır. Bu kontrolü merkezi bir yerde yapabileceğim bir yol var mı?jQuery: Tüm tıklama olayları gerçekleşmeden önce tuzağa düşüyor mu?

Şu anda örneğin, bayrak için kontrol her olay: Ben yapmak istiyorum ne

var canClick = false; // Global flag 

// Sample click event: 
$("#someDiv").click(function(){ 
    if(!canClick) return; 

    // Some stuff ... 
}); 

başka elementler önce tüm tıklama olayları hapseden bir eleman olması.

belgesini numaralı belgede yapmayı denedim ancak bu olaylar yalnızca diğer tıklama olaylarından sonra gerçekleşir.

Örnek:

Ben de her şeyin üstünde tam ekran div koyarak ve tuzak olaylara bu kullanarak çalıştı
$("#someDiv").click(function(){ console.log("someDiv click"); }); 

$(document).click(function(){ console.log("Document click"); }); 

// When I click on the someDiv element it prints: 
> someDiv click 
> Document click 

ancak tıklama hiçbiri bu tam ekran div boyunca yayılan ediliyordu vardı sorunu. Ayrıca tıklamaları tıklamak için ekstra bir unsur oluşturmaya güvenmek istemiyorum.

JQuery tıklama işlevinin üzerine yazabilir miyim, böylece küçük çekmemi oraya koyabilir miyim?

Burada eksik olduğum belli bir şey var mı?

Yardımlarınız için teşekkür ederiz.

cevap

22

Evet, .addEventListener() öğesini kullanın ve 3. seçeneği true olarak ayarlayın. Bu, dinleyiciyi yakalama aşamasına bağlar ve başka herhangi bir şey gerçekleştirilmeden önce işlevi yürütür.

İşte bu yürütülmesini tüm tıklama işleyicileri duracak bir örnek:

document.addEventListener('click', function(e) { 
    e.stopPropagation(); 
}, true); 

yapıldığını burada bakınız:

http://jsfiddle.net/wLwMh/1/

+0

Ahh parlak! Çok teşekkür ederim bayım. Chrome 11'de çalışır, uyumlu olması için ihtiyacım olan tek tarayıcı budur. Şerefe. – nebs

+4

Çapraz tarayıcı uyumluluğu gerektiren herkes için, bu IE <9 tarafından desteklenmez – opsb

0

Daha sonra da dinleyici çekinize sonra bağlı olan özel bir etkinlik tetiklemek tüm tıklama olaylarını yakalayabilecek

$("#someDiv").bind('awesomeEvent', function() { 
    //do stuff here 
} 

$(*).click(function() { 
    if(canClick) { 
     $(this).trigger('awesomeEvent'); 
    } 
} 

DÜZENLEME $ kullanarak (*) seçici iyi bir fikir olmadığını belirtmek gerekir performans açısından. Kapsamı bir şekilde denemelisiniz.

İlgili konular