2009-08-19 100 views
3

我有以下JQuery函數被附加到網頁上n個文本框的模糊事件。JQuery和'this'對象

$(document).ready(function() { 
     $("input[id$='_txtTuitionAmt']").blur(function() { 
      alert(this.value); 
     }) 
    }); 

它工作得很好。當用戶跳出任何文本框時,彈出警報並在文本框中顯示該值。

我很困惑的是「this.value」,以及它是JQuery還是JavaScript。我是否以正確的方式使用'this'對象,或者我是否應該做其他事情來獲得元素的價值?

對不起,如果我的問題似乎有點模糊。我只是試圖去處理「這個」對象以及它是如何工作的。我查看了JQuery文檔,但在「this」上找不到任何內容。

+0

我相信jQuery使用調用或應用重新綁定'this',以便您傳遞的函數的上下文是由jQuery對象表示的DOM元素的上下文。 – Nick 2012-05-02 18:22:37

回答

12

是指當前DOM對象(以同樣的方式,即document.getElementById("someid")指通緝DOM對象)。基於瀏覽器,您現在可以訪問該對象的功能/字段(即this.nodeName, this.value,...)您正在訪問瀏覽器實現提供的內容。

如果使用$(本)(或$("#someid")$(document.getElementById("someid")))你ecapsulating對象jQuery中 - 所以你現在可以訪問jQuery的功能和領域(即$(this).val(); $(this).find("somenode"),....)

如果你有一個jQuery對象(即var n = $(this).find("#someid");),並且你想擺脫jquery膠囊,因爲你需要一個標準的dom函數,你可以使用.get(0)

這個本身可以解析爲不同的對象,這取決於它被調用的位置。它可以是一個,如果叫一個onclick或其他事件處理程序中節點(<div id="asdf" onclick="alert(this.id)... - 將打印ASDF),表格或其他物體 - 見http://www.quirksmode.org/js/this.html

+0

啊...燈泡剛剛閃過!優秀的描述。非常感謝你! – Jagd 2009-08-19 21:27:15

1

「this」指的是前面的jQuery selected元素。由於您在jQuery回調函數中使用「this」,因此「this」實際上指向由jQuery選擇的DOM對象。如果你會使用「$(this)」,那會直接暴露出匹配元素的jQuery對象。正如其他人提到的,允許您將jQuery函數應用於該元素。

參見:this demystifiedThe this keyword

+0

'this'不指向jQuery。正如普拉卡什注意到的那樣,它指向了DOM元素。 – 2009-08-19 21:15:18

7

此= DOM元素

$(本)= jQuery'ified

通常我使用普通的舊的JavaScript其中我可以。在這個例子中的jQuery替代品是$(this).val() - 我不認爲它的需要。

+0

雖然在處理選擇元素this.options [this.selectedIndex] .value時,'$(this).val()'更短,並且也可以處理多種類型的元素。 – gnarf 2009-08-19 21:14:53

3

JQuery的文檔爲Core/each

每個匹配的元素的上下文中執行的功能。

這意味着每次執行傳入的函數(對於每個匹配的元素都是一次),'this'關鍵字指向特定的DOM元素。請注意,'this'並不指向一個jQuery對象。

0

文章(請原諒這個雙關語)解釋如何工作的多一點:

Why I still prefer Prototype to JQuery

筆者認爲,對jQuery庫一個糟糕的設計決定,但我不主張任何一種方式。我只是覺得這篇文章很有趣。