2011-05-27 19 views
16

मेरे पृष्ठ पर मेरे पास कई सारे तत्व हैं जो क्लिक ईवेंट पर प्रतिक्रिया देते हैं। ऐसे समय होते हैं जब मुझे कुछ वैश्विक ध्वज के आधार पर सभी क्लिक अवरुद्ध करने की आवश्यकता होती है। क्या कोई तरीका है कि मैं इस चेक को केंद्रीकृत स्थान में कर सकता हूं?jQuery: ट्रैप सभी घटनाओं से पहले घटनाओं पर क्लिक करें?

अभी प्रत्येक घटना मैं ध्वज के लिए जाँच, उदाहरण के लिए:

var canClick = false; // Global flag 

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

    // Some stuff ... 
}); 

मैं क्या करना चाहते हैं क्या एक तत्व जो सभी क्लिक ईवेंट किसी भी अन्य तत्वों से पहले फंसा लेती है है।

मैंने इसे दस्तावेज़ पर करने का प्रयास किया लेकिन ये ईवेंट केवल अन्य क्लिक ईवेंट के बाद होते हैं।

उदाहरण:

$("#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 

मैं भी सब कुछ के शीर्ष पर एक पूर्ण स्क्रीन div डालने और जाल की घटनाओं को यह उपयोग करने की कोशिश लेकिन समस्या नहीं थी, जो क्लिक से कोई भी इस पूर्ण स्क्रीन div के माध्यम से प्रचारित किया जा रहा था। इसके अलावा मैं जाल क्लिक के लिए अतिरिक्त तत्व बनाने पर भरोसा नहीं करना चाहता क्योंकि यह थोड़ा हैकी लगता है।

क्या मैं शायद jQuery क्लिक फ़ंक्शन को ओवरराइट कर सकता हूं ताकि मैं वहां अपनी छोटी जांच डाल सकूं?

क्या कुछ स्पष्ट है कि मैं यहां याद कर रहा हूं?

किसी भी मदद के लिए धन्यवाद।

उत्तर

22

हां, .addEventListener() का उपयोग करें और तीसरा विकल्प सत्य पर सेट करें। यह श्रोता को कैप्चर चरण में बांध देगा और किसी और को निष्पादित करने से पहले फ़ंक्शन निष्पादित करेगा।

एक उदाहरण है जहाँ इस क्रियान्वित करने से सभी क्लिक संचालकों बंद हो जाएगा है:

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

यह देखें कार्रवाई यहाँ:

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

+0

आह प्रतिभाशाली! बहुत बहुत धन्यवाद श्रीमान धन्यवाद। क्रोम 11 में काम करता है, यह एकमात्र ब्राउज़र है जिसके साथ मुझे अनुकूल होना चाहिए। चीयर्स। – nebs

+4

किसी भी व्यक्ति के लिए जो क्रॉस-ब्राउज़र संगतता की आवश्यकता है, यह IE द्वारा समर्थित नहीं है <9 – opsb

0

आप सभी क्लिक ईवेंट ले सकता है तो जहाँ आप अपने श्रोताओं अपने जांच के बाद बाध्य है एक कस्टम ईवेंट ट्रिगर

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

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

संपादित कि $ का उपयोग कर (*) चयनकर्ता एक अच्छा विचार नहीं है मैं उल्लेख करना चाहिए एक प्रदर्शन दृष्टिकोण से। आपको किसी भी तरह से दायरे को वास्तव में कोशिश और संकीर्ण करना चाहिए।

संबंधित मुद्दे