2010-04-13 33 views
6

這不是關於jQuery的問題,而是關於jQuery如何實現這樣的行爲。簡單的javascript來模仿jQuery在事件處理程序中使用這種行爲

在jQuery中,你可以這樣做:

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

會有人籠統地解釋(不需要你編寫代碼),他們怎麼獲得通過事件的調用者HTML elments(在這個具體的例子鏈接)進入這個關鍵字?

我顯然試圖在jQuery代碼中看第一,但我無法理解一行。

謝謝!

UPDATE: 根據阿努拉格答案,我決定在這一點上張貼一些代碼,因爲它似乎比我想象中的簡單代碼:

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

FF看起來不錯,長時間沒有寫出IE特定的事件處理,但是如果它工作的話,那一切都很好! :) – Anurag 2010-04-14 01:42:53

回答

2

在Javascript中,你可以通過編程調用一個函數,並告訴它什麼this應該是指,在Function使用無論是callapply方法傳遞一些參數。在Javascript中,函數也是一個對象。

jQuery迭代其結果中的每個匹配元素,並在該對象上調用該函數的click函數(在您的示例中),將元素自身作爲上下文或將this引用到函數內部。

例如:

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

這將調用上下文(這)對象的文本功能,並提醒它的價值。現在,我們可以調用函數,使上下文(這)是jQuery的包裝元素(因此,我們可以直接調用this不使用$(this)

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

的區別使用callapply調用的函數是潛移默化之間隨着call參數會被原封不動地,並與apply,他們將作爲數組進行傳遞。閱讀上MDC更多applycall

同樣,當一個DOM事件處理程序被調用,this已指向元素那觸發了事件。 jQuery只是調用你的回調函數,並將上下文設置爲元素。

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

嗯...這似乎很簡單。我根據你的回答更新了問題,我想聽聽你的反饋。 – 2010-04-13 19:13:41

相關問題