2011-04-21 119 views
0

我被要求幫助添加onChange的選擇,所以我想出了這個:jQuery的HTML元素屬性名

$("select[name=component]").change(function() { 
    $("input[name=Code]").val(JSONObject[$(this).selectedIndex].code; 
    $("input[name=Category]").val(JSONObject[$(this).selectedIndex].category; 
    $("input[name=UOM]").val(JSONObject[$(this).selectedIndex].uom; 
}); 

提問者告訴我,它沒有工作,直到他改變$(this)this

這隻對我有意義,如果jQuery沒有使用我認爲是jQuery對象的名稱selectedIndex。如果不是,我只需要使用.attr("selectedIndex")

jQuery是否將對象從$(this)(jQuery對象)轉換爲表單元素或選擇對象?

回答

5

jQuery對象實際上並不是DOM元素的擴展:DOM元素成爲jQuery的一個子元素。

這是jQuery對象的0成員,因此,如果由於某種原因,人們需要使用jQuery對象(如它在@nickf這個例子的上下文是瘋狂的 - 你只想用this.selectedIndex代替),一個將不得不使用

$(this)[0].selectedIndex 

訪問原始屬性。

+2

值得指出的是編寫'$(this)[0]'是瘋狂的。 – nickf 2011-04-21 16:52:26

+0

@nickf好點,補充說。 – 2011-04-21 16:53:31

+0

謝謝@nickf - 我知道這一個;) – mplungjan 2011-04-21 17:03:39

2

$(this)將確實將給定的對象包裝到JQuery對象中 - 並且由於selectedIndex不是html元素的屬性,因此無法訪問該屬性。因此,訪問該屬性的正確方法的確不是將它包裝在jquery對象中 - 所以this.selectedIndex。

+0

也感謝你 – mplungjan 2011-04-21 17:02:25

3

在所有事件處理程序中,this是DOM元素本身,不是jQuery對象。

這裏沒有什麼魔法 - $(this)只是簡單地創建一個包裹在元素(<select>)周圍的jQuery對象。 jQuery沒有.selectedIndex屬性,但是DOM元素有,所以沒有必要調用$(this)