2011-01-26 78 views
5

這個問題只是出於好奇。我想知道jQuery的.click()如何在幕後工作。JQuery的.click()如何在幕後工作?

舉例來說,如果我創建了一個按鈕:

<input type="button" id="myButton" value="Click me!" /> 

然後,我有以下的jQuery代碼:

$('#myButton').click(function() { 
    alert("I have been clicked."); 
}); 

如何jQuery的讓這個按鈕被按下時,我的函數被調用?

起初我以爲它會添加onClick=""屬性按鈕的標籤,但是當我檢查的頁面使用Firebug我剛纔看到:

<input type="button" id="myButton" value="Click me!" /> 

那麼什麼是jQuery的做幕後?

+1

爲了將來的參考,您還可以檢查jQuery源代碼以查看究竟發生了什麼。這並不總是很清楚(所以你的問題是完全合理的),但值得一試。這個網站是非常有用的:http://james.padolsey.com/jquery/#v=1.4 – 2011-01-27 02:40:42

回答

3

這將取決於瀏覽器。

如果您使用支持addEventListener()的瀏覽器,則會使用該瀏覽器添加處理程序。

雖然我敢肯定,他們實際上是連接,首先維修/規格化event對象的功能,然後檢查爲jQuery12345...屬性的DOM元素並查找處理程序jQuery.cache和調用它。

如果您需要登錄你的元素到控制檯,你會看到,看起來像一個屬性:

jQuery1296081364954: 1 

然後,如果你登錄這個數字從jQuery.cache控制檯,你會看到相關的數據。

console.log(jQuery.cache[1]); 

...這將給結構是這樣的:

{ 
    events:{ 
     click:[ 
     { /* object containing data relevant to the first click handler */ } 
     ] 
    }, 
    handle:{ /* this may be what initially gets called. Not sure. */ } 
} 

因爲jQuery不歸事件對象,它是不是很公正分配AA處理程序,爲您和通話一樣簡單它。我相信它也是通過緩存來完成的,以避免舊版瀏覽器發生內存泄漏。

4

使用DOM事件模型,這也是添加onClick()時發生的情況。所以基本上它會註冊一個偵聽器來觸發點擊事件,然後執行您告訴它的代碼。

1

該函數附加到您的輸入上的onclick事件,但不使用html聲明,而是使用純javascript。不用查看html代碼,而是查看螢火蟲中的DOM選項卡,您應該在那裏找到它。

在普通的JavaScript它就像

document.getElementById('myButton').addEventListener('click',function() { alert('hello!');},false); 
+0

非常感謝你。 – Anton 2011-01-26 22:32:08

相關問題