2012-03-13 14 views
5

डुप्लिकेट करता है मैंने क्रोम जावास्क्रिप्ट फोकस ईवेंट को कैसे प्रबंधित किया है, इस बारे में एक अजीब समस्या देखी है। तथ्य यह है कि, यह लगातार फोकस घटना को ट्रिगर करता है, भले ही यह केवल एक बार होता है। मैंने यहां थोड़ा सा शोध किया है और उन प्रश्नों को पाया है जहां चेतावनी() का उपयोग करते समय लोग एक ही समस्या में भाग लेते हैं। जब वे अलर्ट विंडो बंद करते हैं, तो फोकस उनके इनपुट पर वापस आ जाता है और एक हैंडलर बार-बार ट्रिगर्स करता है। मेरे मामले में, समस्या अलग है, क्योंकि मैं console.log() का उपयोग कर रहा हूं, और समय-समय पर मुझे एक ही लॉग 2 या 3 बार भी मिलता है। मैंने देखा है कि आमतौर पर तब होता है जब मैं कंसोल साफ़ करता हूं, और उसके बाद तत्व पर ध्यान केंद्रित करता हूं। जब मैं इसे दोहराने की कोशिश करता हूं, तो यह और नहीं होता है।Google क्रोम जावास्क्रिप्ट 'फोकस' ईवेंट

परिदृश्य:

  1. साफ़ सांत्वना
  2. तत्व पर
  3. फोकस (2 या 3 कंसोल संदेश) अन्य समान तत्व पर
  4. फोकस या unfocus और ही एक पर फिर से ध्यान केंद्रित (कोई समस्या नहीं)
  5. साफ़ सांत्वना
  6. तत्व पर
  7. फोकस (2 या 3 कंसोल संदेशों - समस्या वापस आ गया है)

मैं एक jsfiddle बना लिया है, तो कृपया उसे जाँच आउट: http://jsfiddle.net/ffuWT/3/

सवाल है, इस समस्या के लिए क्या कारण है और मैं इसे चारों ओर कैसे काम कर सकते हैं?

+1

मेरे लिए अपेक्षित काम करता है (जिस तरह से आप इसका वर्णन नहीं करते हैं) क्रोम 17.0.963.78 मीटर – m90

+0

चला रहा हूं, मैं आपकी समस्या को फिर से बनाने में सक्षम नहीं हूं, और मुझे नहीं लगता कि कंसोल को '# 4' में कैसे साफ़ किया जाएगा दो बार फायरिंग घटनाओं के साथ एक समस्या पैदा करते हैं? क्या आपने ईवेंट को अपने फ़ंक्शन में बुलबुले से रोकने की कोशिश की है? 'E.stopPropagation()' –

+0

जोड़ने का प्रयास करें, मैं समस्या को फिर से बनाने में सक्षम हूं। 'e.stopPropagation' मेरे लिए इसे हल नहीं करता है। –

उत्तर

3

मैं समस्या को फिर से बनाने में सक्षम था (अपने जेएसफ़िल्ड का उपयोग करके) और जो कुछ मैं देख सकता हूं उससे केवल तभी होता है जब आप परिणाम फ्रेम पर ध्यान केंद्रित किए बिना select पर क्लिक करते हैं।

फ्रेम के भीतर क्लिक करें, लेकिन select पर नहीं, इससे पहले कि आप select एस में से किसी एक का विस्तार करने के लिए क्लिक करें और आप केवल एक पंक्ति लॉग देखेंगे।

आप देखने के लिए jsFiddle URL पर /show भी जोड़ सकते हैं।

ऐसा लगता है कि select नियंत्रण पर क्लिक करके विंडो को ध्यान में रखते हुए ईवेंट कई बार ट्रिगर करता है।

Open this demo और ब्राउज़र विंडो unfocus और फिर select रों अपने option रों विस्तार और सांत्वना देखने पर से एक पर क्लिक (डेस्कटॉप, टास्कबार या अन्य विंडो पर क्लिक करके)।

क्रोम का उपयोग 17.0.963.7 9 मीटर।

6

डरावना यह कैसे हो सकता है। मैंने आज इस काम पर इस सटीक मुद्दे को चलाया है, लेकिन इसे तुरंत तीसरे पक्ष के प्लगइन (jQuery कस्टम इनपुट) में संदिग्ध डोडी इवेंट सुनने और प्रसार से संदिग्ध कर दिया है। मैं कल अपने jsfiddle दोबारा जांचूँगा।

मैं वर्तमान में पर अपने सटीक आउटपुट को फिर से बनाने में असमर्थ हूं 0 वर्तमान में सेटअप (मैक पर क्रोम v17) लेकिन मेरे पास साझा करने के लिए एक सिद्धांत है। आपके परिदृश्य में और बेन ली की टिप्पणी में लगातार हिस्सा दूसरी विंडो (आपके मामले में कंसोल) पर फ़ोकस स्थानांतरित कर रहा है।

खिड़की पिछड़े भेजा, जबकि एक फ़ोकस करने योग्य तत्व केंद्रित है, कलंक घटनाओं दोनों पर सक्रिय होना चाहिए है, तो:

"विंडो + फ़ोकस करने योग्य तत्व" के अंतर्गत

चेक बाहर http://www.quirksmode.org/dom/events/blurfocus.html। यदि खिड़की को फिर से लाया गया है, तो फोकस ईवेंट दोनों पर आग लगनी चाहिए।

और अगले, संगतता तालिका में यह ध्यान दिया जाता है कि

सफारी विंडोज दो फोकस घटनाओं सक्रिय करता है।

शायद क्रोम अंततः वेबकिट परिवार से आने वाले "फीचर" को भी मिला?

+0

धन्यवाद, आपका उत्तर सही है, और लिंक भी उपयोगी है। मैंने स्टीफन के जवाब का चयन करने का निर्णय लिया है, क्योंकि उसने मुझे इस समस्या के कारण (या सिर्फ अलग व्यवहार, यदि आप चाहें) के बारे में सटीक और सही जानकारी दी है, जबकि आपने केवल अपना सिद्धांत पोस्ट किया है। जो सच है, वास्तव में, तो +1, वैसे भी। – noname

+0

@noname: मुझे दोबारा जांचने की आवश्यकता बचाता है :) –

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