[英]Add field to a jquery element and use with click event
我正在嘗試將字段添加到jQuery元素並在click事件回調中使用它,為什么它不起作用,可能嗎?
$button = $("#myButton");
$button.i = 5;
$button.on('click',function(){
console.log($(this).i)
});
您根本不會在每種情況下都訪問相同的對象。
在jQuery事件處理程序回調中, this
等於DOM節點本身(即,元素,而不是您將i
屬性設置為的jQuery對象。
有很多解決方法:
希望有幫助!
更新以回答您的問題:
在該場景中,只有一個DOM節點,即<button>
-我們可以將其視為整個對象的一個基礎對象。
創建$ button變量時,可以通過將DOM節點交給jQuery來完成,並返回一個新對象。 這就是包含所有這些很棒的jQuery方法的內容,例如您在上面使用的.on()
。
即$ button和<button>
是不同的對象。
現在讓我們考慮一下您的i
屬性...
您將i
設置為JavaScript對象$ button的屬性,但是如上所述,這是一個與<button>
DOM節點截然不同的對象(由jQuery為我們創建)。 在$ button上設置i
與DOM節點無關。
現在,在您的jQuery提供的單擊處理程序中,該庫this
綁定設置為原始DOM節點, 而不是您的$ button對象。
在單擊處理程序內,您執行與腳本開頭非常相似的操作-引用DOM節點<button>
( this
),並將其提供給jQuery,以便它可以再次創建新對象 。
因此, <button>
它與$ button是不同的對象,而$ button也是與單擊處理程序中的$(this)不同的對象。
最后,讓我們考慮一下jQuery .attr()
幫助器函數。
如果不是在$ button上設置i
屬性,而是使用.attr方法設置i
屬性 ,則jQuery內部將通過分配包含值5
的屬性i
來更新DOM節點本身。
正如我們在一開始所確定的那樣,DOM節點一直都是相同的,因此我們可以輕松地在點擊處理程序中再次訪問該屬性!
這是一個例子。 閱讀有關jquery.data的一些信息
var button = $("#myButton");
button.data('i', 5);
button.click(function(){
alert($(this).data('i'))
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.