2010-01-08 11 views
5

मैं दो ईवेंट हैंडलर को 'कीडाउन' पर इनपुट फ़ील्ड में बाध्य कर रहा हूं। यदि एंटर कुंजी दबा दी गई है, तो पहले इवेंट हैंडलर को ईवेंट के प्रसार को रोकने की आवश्यकता है ताकि यह दूसरे ईवेंटशेलर को हिट न करे। मैं ऐसा कर रहा हूं:jquery फ़ायरफ़ॉक्स स्टॉपप्रॉपेशन()

if (jQuery.browser.msie) { 
        event.cancelBubble = true; 
       } else { 
        event.stopPropagation(); 
       } 

अब यह अकेले आईई या फ़ायरफ़ॉक्स में ईवेंट प्रचार को रोकता नहीं है। यह पहला इवेंट हैंडलर हिट करता है, और फिर दूसरे इवेंट हैंडलर को भी हिट करता है। हालांकि, दूसरे कार्यक्रम हैंडलर में, मैं वास्तव में आईई के मामले में (e.cancelBubble) जांच सकता हूं। फ़ायरफ़ॉक्स के साथ जांचने का कोई तरीका है?

उत्तर

13

बस IE के लिए अपने परीक्षण को हटाने और इस का उपयोग करें:

event.stopImmediatePropagation(); 

कौन सा दोनों ब्राउज़र में फायरिंग से अन्य घटनाओं रखेंगे।

event.stopPropagation() घटनाओं को बुलबुले से बनाए रखेगा, लेकिन अन्य ईवेंट हैंडलर को उसी वस्तु के लिए फायरिंग से नहीं रखा जाएगा।

अपने अन्य प्रश्न का उत्तर देने के लिए, यदि आपने अभी event.stopPropagation() का उपयोग किया है तो आप दूसरे हैंडलर में event.isPropagationStopped() देख सकते हैं।

सुझाव: सामान्य नियम के रूप में jQuery कार्यक्षमता के लिए एक इंटरफ़ेस प्रदान करने के लिए सभी ब्राउज़र व्यवहार को पूरी तरह से सारणीबद्ध करता है। यदि आप jQuery फ़ंक्शन चलाने से पहले if(jQuery.browser.msie) चलाते हैं, तो शायद इसे चलाने के लिए एक बेहतर तरीका है जो क्रॉस ब्राउज़र काम करेगा। और, जब आपको परीक्षण करने की आवश्यकता होती है, तो आपको विशिष्ट ब्राउज़र स्नीफिंग की कार्यक्षमता के परीक्षण के लिए jQuery.support का उपयोग करना चाहिए।

+2

वाह आदमी, जो एक आकर्षण की तरह काम करता था !! मुझे isPropagationStopped() का उपयोग भी नहीं करना पड़ा, क्योंकि स्टॉपइमीडिएटप्रॉपेशन() वास्तव में काम करता है !! बहुत बहुत धन्यवाद। – Riz

+0

यह वास्तव में सहायक था। – Nick

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