2011-04-07 13 views
33

मैं एक चेकबॉक्स में एक ईवेंट जोड़ने के लिए चारों ओर देख रहा था और मैंने सोचा था कि लोग बदलाव ईवेंट स्थापित करने के लिए .change का उपयोग करेंगे, लेकिन इसके बजाय मुझे पता चला कि लोग .click का उपयोग कर रहे हैंचेकबॉक्स पर .click और .change के बीच क्या अंतर

क्या इसके लिए कोई कारण है? वे दोनों क्लिक किए गए कार्यक्रमों और कीबोर्ड परिवर्तनों के साथ ठीक काम करने लगते हैं। क्या मैं कुछ भूल रहा हूँ?

तुम मुझे विश्वास नहीं है तो try it out yourself

+0

रोचक अवलोकन! – mcgrailm

उत्तर

33

केवल आईई आग में onchange जब चेकबॉक्स ध्यान केंद्रित खो देता है। तो यदि आप इसे टैब करते हैं, तो स्पेस को कुछ बार दबाएं, टैब आउट करें, आपको केवल एक onchange ईवेंट मिलेगा, लेकिन कई onclick ईवेंट होंगे।

नोट: यह बहुत ही बहुत ही दुर्लभ समय है जब आईई का व्यवहार सही है (spec के अनुसार) और अन्य ब्राउज़र गलत हैं।

+0

भी दिलचस्प नहीं था कि आप – mcgrailm

+0

जैसी चीजों पर क्लिक करते हैं, वास्तव में यह भी क्लिक के लिए काम करता है। यदि आप दो बार चेकबॉक्स पर क्लिक करते हैं और फिर कहीं और क्लिक करते हैं तो आपको 'ऑनचेंज' ईवेंट नहीं मिलेगा (इसे दो बार क्लिक करके इसे प्रारंभिक मान पर लौटाया जाएगा), लेकिन आपको दो 'ऑनक्लिक' ईवेंट मिलेंगे। –

+0

यह ध्यान देने योग्य है कि जब टेक्स्ट टेक्स्ट फ़ील्ड में फोकस बदलता है तो केवल तभी आग लगती है - मुझे पता नहीं था कि व्यवहार चेकबॉक्स के लिए अलग था, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि उनका ध्यान भी परिभाषित नहीं है। – crazy2be

0

। परिवर्तन महत्वपूर्ण परिवर्तनों के संबंध में कम से कम कुछ लोकप्रिय ब्राउज़रों के लिए सही ढंग से काम नहीं करता है (उपयोगकर्ता ऊपर/नीचे तीर कुंजियों के साथ विकल्प चुनते हैं) लेकिन फिर। क्लिक इस पर काबू पाता है। कभी-कभी कुंजीपटल या कीडाउन या किसी चीज का उपयोग इस समस्या को दूर करने के लिए .change के साथ संयोजन में किया जाता है, हालांकि जब आप उपयोगकर्ता के टैब को दस्तावेज़ करते हैं तो यह थोड़ा गन्दा हो जाता है क्योंकि यह कॉलबैक के भीतर स्पष्ट रूप से संभाला नहीं जाता है। सब कुछ यह एक शर्म की बात है। परिवर्तन काम नहीं करता है क्योंकि आप उम्मीद करेंगे क्योंकि यह कुछ समय लेने वाले मुद्दों को हल करेगा।

0

हाँ दोनों काम, केवल वास्तविक वस्तु को बदलने पर क्लिक नहीं करता है (जैसे चेकबॉक्स जो चेक हो जाता है), परिवर्तन करता है।

तकनीकी रूप से यह अधिक विश्वसनीय है लेकिन व्यवहार में दोनों काम करते हैं।

0

वे दोनों डिफ़ॉल्ट रूप से मूल्य में परिवर्तन को आग लगा सकते हैं, लेकिन आप ऑनक्लिक तर्क को ओवरराइड कर सकते हैं ताकि किसी चैकबॉक्स के मान को न बदल सकें। आप किसी अन्य प्रविष्टि बिंदु के माध्यम से मूल्य बदल सकते हैं। तो एक .click और एक .change की जरूरत है।

संपादित करें - मैं भी क्यों onclickonchange से अधिक पसंद किया जाता है डॉ रोब

6

दो कारणों के साथ सहमत हैं।

  1. इंटरनेट एक्सप्लोरर केवल एक्सचेंज ईवेंट को सक्रिय करता है जब चेकबॉक्स फोकस (ऑनब्लर) खो देता है। तो onclick एक क्रॉस ब्राउज़र समाधान का अधिक है।

  2. onchange तत्व को ध्यान देने के बाद ही होता है। (आप एक अंतर नहीं देखते हैं क्योंकि आप सतर्कता को बुला रहे हैं और हर परिवर्तन पर ध्यान खो रहे हैं)। एमडीसी पर छद्म कोड काफी element.onchange कार्यान्वयन को समझाता है।

    control.onfocus = focus; 
    control.onblur = blur; 
    
    function focus() { 
        original_value = control.value; 
    } 
    
    function blur() { 
        if (control.value != original_value) 
         control.onchange(); 
    } 
    
+0

एफवाईआई, IE के अलावा सभी ब्राउज़रों (अच्छी तरह से एफएफ, क्रोम, सफारी वैसे भी) चेकबॉक्स पर तुरंत आग लगाना। –

+0

@cwolves: मुझे यह पता है। लेकिन 56% उपयोगकर्ता अभी भी आईई का उपयोग करते हैं :) http://en.wikipedia.org/wiki/Usage_share_of_web_browsers – naveen

+0

आपका लिंक 45% औसत कहता है :) –

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