2010-04-13 8 views
6

यह jQuery के बारे में कोई प्रश्न नहीं है, लेकिन jQuery इस तरह के व्यवहार को कैसे लागू करता है।इवेंट हैंडलर में इसका उपयोग करने के jQuery व्यवहार की नकल करने के लिए सरल जावास्क्रिप्ट

jQuery में आप यह कर सकते हैं:

$('#some_link_id').click(function() 
{ 
    alert(this.tagName); //displays 'A' 
}) 

किसी सामान्य शब्दों में समझा सकता है (कोई ज़रूरत नहीं आप कोड लिखने के लिए) कैसे वे घटना की कॉलर एचटीएमएल elments (इस विशिष्ट उदाहरण में एक लिंक पारित करने के लिए प्राप्त करना) में यह कीवर्ड?

मैंने स्पष्ट रूप से jQuery कोड में पहला देखने की कोशिश की, लेकिन मैं एक पंक्ति को समझ नहीं पाया।

धन्यवाद!

अद्यतन:

function AddEvent(html_element, event_name, event_function) 
{  
    if(html_element.attachEvent) //IE 
     html_element.attachEvent("on" + event_name, function() {event_function.call(html_element);}); 
    else if(html_element.addEventListener) //FF 
     html_element.addEventListener(event_name, event_function, false); //don't need the 'call' trick because in FF everything already works in the right way   
} 

और फिर एक साधारण कॉल हम jQuery की नकल के साथ अब: अनुराग जवाब के अनुसार मैं क्योंकि यह मैं क्या सोचा था की तुलना में कोड करने के लिए आसान लगता है इस बिंदु पर कुछ कोड पद का फैसला किया घटनाओं संचालकों में इस का उपयोग कर के व्यवहार

AddEvent(document.getElementById('some_id'), 'click', function() 
{    
    alert(this.tagName); //shows 'A', and it's cross browser: works both IE and FF 
}); 

आपको लगता है कि उनमें कोई त्रुटि या कुछ और मैं एक भी sup में सभी बात लेने को गलत समझा रहे हैं क्या एरिपियल तरीका ???

+0

एफएफ अच्छा लग रहा है, लंबे समय में आईई विशिष्ट घटना हैंडलिंग नहीं लिखा है, लेकिन अगर यह काम करता है, तो यह सब अच्छा है! :) – Anurag

उत्तर

2

जावास्क्रिप्ट में, आप प्रोग्राम एक समारोह कॉल कर सकते हैं और यह बताओ कि this का संदर्भ लेना चाहिए, और यह कुछ तर्क Function में या तो call या apply विधि का उपयोग कर गुजरती हैं। कार्य जावास्क्रिप्ट में भी एक वस्तु है।

उसके परिणामों में हर मिलान तत्व के माध्यम से jQuery दोहराता है, और उस ऑब्जेक्ट पर click फ़ंक्शन को कॉल (अपने उदाहरण में) संदर्भ या क्या this कि समारोह के अंदर को संदर्भित करता है के रूप में तत्व में ही गुजर।

उदाहरण के लिए:

function alertElementText() { 
    alert(this.text()); 
} 

इस संदर्भ (यह) वस्तु पर पाठ फ़ंक्शन को कॉल करें, और यह मूल्य है सूचित करेंगे। अब हम call या apply का उपयोग कर कॉल करने के लिए समारोह सूक्ष्म है के बीच फ़ंक्शन को कॉल करें और संदर्भ (यह) jQuery लिपटे तत्व (ताकि हम this$(this) का उपयोग किए बिना सीधे कॉल कर सकते हैं होने के लिए कर सकते हैं।

<a id="someA">some text</a> 
alertElementText.call($("#someA")); // should alert "some text" 

भेद । call के साथ तर्क के रूप में वे कर रहे हैं पारित कर दिया जाएगा, और apply साथ वे एक सरणी के रूप में पारित हो जाएगा। MDC पर apply और call अधिक के बारे में पढ़ें।

इसी तरह जब एक डोम ईवेंट हैंडलर कहा जाता है, this पहले से ही के लिए अंक तत्व इस घटना को ट्रिगर किया। jQuery बस आपके कॉलबैक को कॉल करता है और तत्व को संदर्भ सेट करता है।

document.getElementById("someId").onclick = function() { 
    // this refers to #someId here 
} 
+0

हम्मम्म ...यह तब बहुत आसान लगता है। मैंने आपके उत्तर के अनुसार प्रश्न अपडेट किया है, मैं आपकी प्रतिक्रिया सुनना चाहता हूं। –

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