2011-09-08 41 views

回答

3

click()功能確實改變任何DOM屬性

+0

這就是我的想法。好的'jQuery。 – mattsven

+1

正如附註一樣,您可以通過執行$('yourele')。data()來查看附加到特定元素的事件。在事件下你可以看到它正在監聽的事件。 –

0

的jQuery設置一個監聽器。

它爲該特定jQuery元素添加了一個偵聽器。

這同樣適用於.change(), .keyup(), ...等等。

0

它不修改元素。

jQuery的() - 其也可以寫成$() - 用於所提供的選擇器匹配的任何元素的搜索通過DOM 並創建一個新 jQuery對象引用這些元素

0

望着jQuery的1.6.2來源:

$("myElement").click(...) calls: $("myElement").bind('click', ...) 
which then calls: jQuery.event.add(...) 
which ultimately does either elem.addEventListener(...) or elem.attachEvent(...) 

因此,我們可以說得出結論,它不是設置onclick屬性(這是我們的addEvent以來期待監聽器更具可擴展性)。

但是,當我通過.click()函數深入內部時,屬性被添加到DOM對象。它與jQuery的數據函數有關,它與jQuery數據函數中的這段代碼有關,該函數從event.add(...)調用。它看起來像是某種guid標識符,jQuery用它來跟蹤哪些對象是不保留DOM引用(這可能導致內存泄漏)。 ,增加該屬性的代碼是在這裏:

if (!id) { 
     // Only DOM nodes need a new unique ID for each element since their data 
     // ends up in the global cache 
     if (isNode) { 
      elem[ jQuery.expando ] = id = ++jQuery.uuid; 
     } else { 
      id = jQuery.expando; 
     } 
    } 

所以,綜上所述,jQuery是沒有摸過.onclick屬性,但設置的第一個事件處理程序時,它被設置DOM對象上的至少一個其他屬性。

+0

你爲什麼期望它設置一個屬性?! – Neal

+0

你誤解了我的意思(寫得不好,現在我改變了)。我是**不是**期待它設置onclick屬性。但事實證明,它確實在DOM對象上設置了不同的屬性。 – jfriend00

相關問題