$("myElement").click(function(){
alert("Clicked!");
};
有#myElement
被修改,它的onclick
屬性設置,還是jQuery的只是設置一個監聽器?如果使用.click();
$("myElement").click(function(){
alert("Clicked!");
};
有#myElement
被修改,它的onclick
屬性設置,還是jQuery的只是設置一個監聽器?如果使用.click();
的click()
功能確實不改變任何DOM屬性
的jQuery設置一個監聽器。
它爲該特定jQuery元素添加了一個偵聽器。
這同樣適用於.change(), .keyup(), ...
等等。
它不修改元素。
jQuery的() - 其也可以寫成$() - 用於所提供的選擇器匹配的任何元素的搜索通過DOM 並創建一個新 jQuery對象引用這些元素
望着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對象上的至少一個其他屬性。
這就是我的想法。好的'jQuery。 – mattsven
正如附註一樣,您可以通過執行$('yourele')。data()來查看附加到特定元素的事件。在事件下你可以看到它正在監聽的事件。 –