2011-04-21 90 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)