2012-08-11 6 views
5

मेरे पास एक साइड फलक है जो बाएं से स्लाइड करता है, सामग्री को गतिशील रूप से प्राप्त() के साथ जोड़ता है। मैं फलक के बाहर सभी क्लिक चाहता हूं ताकि इसे फ़ंक्शन ट्रिगर करके बंद कर दिया जा सके। मैंने पढ़े गए अन्य प्रश्नों के आधार पर, मैं निम्नलिखित कोड के साथ आया था।jQuery पर() और स्टॉपप्रॉपेशन()

$('html').click(function() { 
    if (side_showing) { 
     close_side(); 
    } 
}); 

$(document).on("click", "#side", function(event) { 
    event.stopPropagation(); 
}); 

मैं इसे काम नहीं कर सकता। मुझे पता है कि on() फ़ंक्शन ट्रिगर किया जा रहा है, लेकिन event.stopPropagation ऐसा प्रतीत नहीं होता है। कोई सुझाव?

+0

क्या आप वास्तव में 'स्टॉपप्रॉपेशन();' के अर्थ के बारे में जानते हैं? एक नज़र डालें http://www.javascripter.net/faq/eventbubbling.htm#demo –

उत्तर

12

आप stopPropagation() का उपयोग प्रतिनिधि कार्यक्रम हैंडलिंग के साथ नहीं कर सकते (जहां ईवेंट हैंडलर माता-पिता पर है)।

ऐसा इसलिए है क्योंकि यह घटना प्रसार है जो आपके ईवेंट हैंडलर को कॉल करने के समय पहली बार प्रतिनिधि कार्यक्रम को संभालने में काम करता है, घटना पहले से ही प्रचारित हो चुकी है।

आपके कोड में होने वाली चीजों का क्रम है: दस्तावेज़ ऑब्जेक्ट तक ईवेंट प्रसार, फिर आपके ईवेंट हैंडलर को कॉल किया जाता है। इसलिए, जब आप event.stopPropagation() पर कॉल करते हैं तो यह कुछ भी नहीं करता है क्योंकि ईवेंट पहले ही प्रचारित हो चुका है।

यदि आपको पेरेंट ऑब्जेक्ट्स को ईवेंट प्रचार प्राप्त करने की आवश्यकता है, तो आप प्रतिनिधि ईवेंट हैंडलिंग का उपयोग नहीं कर सकते हैं। आपको इवेंट हैंडलरों को सीधे ऑब्जेक्ट्स को असाइन करना होगा ताकि आप प्रचार से पहले ईवेंट को रोक सकें। यदि ये गतिशील रूप से बनाए गए ऑब्जेक्ट्स हैं, तो आपको बनाए जाने के बाद उन्हें ईवेंट हैंडलर असाइन करना होगा।

केवल अन्य समाधान मुझे पता है की मूल वस्तुओं है कि आप इन घटनाओं को देखते हैं और यकीन है कि उन ईवेंट हैंडलर्स घटनाओं की अनदेखी करता है, तो वे अपने #side वस्तु पर ही शुरू करने के लिए नहीं करना चाहते हैं पर ईवेंट हैंडलर्स डाल करने के लिए है।

+0

क्या आप समाधान के बारे में सोच सकते हैं? – Harangue

+1

@ जे 4 जी - मेरे उत्तर में जोड़े गए कुछ विकल्प। – jfriend00

+0

क्या मैं ऑब्जेक्ट पर .on ("क्लिक") का उपयोग करने के बाद .click() का उपयोग कर सकता हूं? – Harangue

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