2012-02-09 11 views
7

मैं jQuery लिखने के थक गया हूं, इसलिए मैं कुछ कच्ची जावास्क्रिप्ट सीखने का फैसला करता हूं। आईई के अटैचमेंट में कुछ मुझे उलझन में डाल दिया। कोड यहाँ है।आईई के अटैचमेंट में 'यह' क्या है

var btn = document.getElementById('myBtn'); 

btn.onclick = function(){ 
    alert(window.event.srcElement === this); //true, I know why. 
}; 

btn.attachEvent('onclick', function(event){ 
    alert(event.srcElement === this); //fasle, but why? 
}); 

मैं इस्तेमाल करने की कोशिश आईई के अंतर्निहित डिबग उपकरण, लेकिन यह सिर्फ मुझसे कहा था कि 'इस' एक वस्तु है, लेकिन ज्यादा कुछ नहीं ... तो क्या 'इस' IE के attachEvent में है?

+0

कंसोल पर 'यह' आउटपुट करने का प्रयास करें और देखें। 'console.log का उपयोग करें (यह)' – Joseph

+0

मैं कोशिश करता हूं, लेकिन आईई ने अभी मुझे बताया कि यह एक वस्तु है, और कुछ नहीं। – shawjia

+1

क्या आपने टाइपो "srcElemnt" टाइप किया था? "ई" के बिना उस घटना की संपत्ति को अपरिभाषित किया जाएगा (और! == यह)। – Bergi

उत्तर

7

आईई विशिष्ट attachEvent विधि से बंधे एक ईवेंट हैंडलर के भीतर, this वैश्विक window वस्तु को संदर्भित करता है डीओएम तत्व जिसमें से ईवेंट हैंडलर ट्रिगर किया गया था।

0

यह एक संदर्भ संदर्भ है और क्लिक ईवेंट होने पर विंडो का संदर्भ दे रहा है, क्योंकि उस समय मौजूद एकमात्र संदर्भ है।

0

मुझे लगता है कि यू मिस्पेल एक शब्द है।



    btn.attachEvent('onclick', function(event){ 
      alert(event.**srcElement** === this); 
    }); 

और मैंने क्रोम और एफएफ में संबंधित फ़ंक्शन addEventListener का परीक्षण किया, तो वे दोनों सच हो गए।

आईई झूठी वापसी करता है। शायद क्योंकि आईटी btn.onclick = fn के साथ सौदा करता है; और विभिन्न तरीकों से btn.attachEvent()। आईई वैश्विक मूल्य (विंडो) को btn.attachEvent() विधि से गुजरता है। आप यह === विंडो का परीक्षण कर सकते हैं, यह सच हो जाता है।

इसके बारे में कोई टिप्पणी? ,

btn.attachEvent('onclick', function(event) { 
    alert(this === window); // true 
} 

इसके विपरीत, मानक addEventListener विधि से बंधे एक ईवेंट हैंडलर भीतर this को दर्शाता है:

+0

तय किया गया। अभी भी झूठा – shawjia

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