2009-05-21 18 views
11

क्या प्रोटोटाइप में फ़ोकस ईवेंट बबल होना संभव है?फोकस के लिए इवेंट पर्यवेक्षक बनाएं?

मैं प्रत्येक इनपुट तत्व पर पर्यवेक्षक को असाइन करने से रोकने की कोशिश कर रहा हूं।

<script language="javascript" type="text/javascript"> 
document.observe('dom:loaded', function() { 

    // Doesn't work 
    $('editForm').observe('focus', function(evnt){ 
     console.log('FOCUS!'); 
    }); 

    // Works 
    $('editForm').select('INPUT').each(function(elem) { 
     elem.observe('focus', function(evnt){ 
      console.log('FOCUS!'); 
     }); 
    }); 

}); 
</script> 

<form method="post" name="editForm" id="editForm" action=""> 
<input type="text" name="foobar" /> 
</form> 

उत्तर

24

फोकस और धुंधला घटनाएं बबल नहीं होती हैं।

आप कैप्चरिंग चरण के दौरान ईवेंट हैंडलर को आग लगा सकते हैं। जब मानक डोम तरीकों का उपयोग कर, आप

document.addEventListener('focus',function(e){/*some code */}, true); 

लिखते थे 'सही' मूल्य यहाँ सबसे महत्वपूर्ण है।

समस्या यह है कि आईई घटना प्रसार के कैप्चरिंग चरण का समर्थन नहीं करता है, लेकिन आईई के लिए आप फोकसिन और फोकसआउट घटनाओं का उपयोग कर सकते हैं, जो फोकस और धुंधला घटनाओं के विपरीत - बबल करें। मैं पीटर पॉल कोच द्वारा लिखे गए इस विषय पर article पढ़ने की अनुशंसा करता हूं। अन्य ब्राउज़र्स (फ़ायरफ़ॉक्स, ओपेरा, सफारी) शायद (मैंने इसका परीक्षण नहीं किया) DOMFocusIn, DOMFocusOut जैसे समर्थन कार्यक्रम जो आईई के फोकसिन और फोकसआउट ईवेंट के लिए समकक्ष हैं।

+0

अगर (_is_ie) { \t // आईई केवल ध्यान केंद्रित/कलंक घटना श्रोताओं \t f.observe ('Focusin', यह .onFocus.bind (यह)); \t f.observe ('फोकसआउट', this.onBlur.bind (यह)); } else { \t // Firefox और Safari फोकस/कलंक घटना श्रोताओं \t \t \t \t f.addEventListener ('फोकस', this.onFocus.bind (यह), सच); \t f.addEventListener ('धुंधला', this.onBlur.bind (यह), सत्य); } फिर ब्लर और ऑनफोकस के अंदर मुझे तत्व (Event.element) मिलता है और यह देखने के लिए कि यह कुछ भी करना चाहिए या नहीं, यह नोड नाम देखें। –

4

आप इस का उपयोग कर सकते हैं:

function focusInHandler(event){ 
    Event.element(event).fire("focus:in"); 
} 
function focusOutHandler(event){ 
    Event.element(event).fire("focus:out"); 
} 

if (document.addEventListener){ 
    document.addEventListener("focus", focusInHandler, true); 
    document.addEventListener("blur", focusOutHandler, true); 
} else { 
    document.observe("focusin", focusInHandler); 
    document.observe("focusout", focusOutHandler); 
} 

document.observe('focus:in', function(event) { 
    // Your code 
}); 

मेरे jsFiddle: http://jsfiddle.net/EpokK/k7RPE/3/

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