2011-06-14 87 views
27

如何获取触发jQuery .change()函数的元素的id? 该功能本身正常工作,但我需要一个具有id="next"的选择器的特定操作。

$("select").change(function() { 
    [...snip....] 
    alert($(this).attr('id')); // <---- not working 
} 

任何想法为什么上述提示无法正常显示?

+0

它看起来像它的工作原理,我... http://jsfiddle.net/interdream/nGtjR/1/ – 2011-06-14 15:43:43

+0

你试图让你改变处理器连接到选择元素的ID? – kinakuta 2011-06-14 15:44:03

回答

57

this是事件被挂钩的DOM元素。 this.id是它的ID。无需将其包装在jQuery实例中以获取它,id属性在所有浏览器上都可靠地反映该属性。

$("select").change(function() {  
    alert("Changed: " + this.id); 
} 

Live example

你不这样做,你的代码示例中,但如果你在看几个表单元素的容器,这会给你的容器的ID。如果你想要触发事件的元素的ID,你可以得到从event object'starget属性:

$("#container").change(function(event) { 
    alert("Field " + event.target.id + " changed"); 
}); 

Live example

(jQuery的保证change事件气泡,即使在IE的地方没有按本身。)

+1

是什么让你觉得'.id'是可靠的? – ajax333221 2012-05-14 04:49:33

+1

@ ajax333221:你有什么理由不这样想?我已经在IE5.5以上版本,Chrome和Firefox以及它们开始使用它,旧的Netscape Navigator,Opera超过十年,Safari,Konqueror,Midori等等。它是[指定](http://www.w3 .org/TR/DOM-Level-2-HTML/html.html#ID-63534901),它在[非常早期版本](http://www.w3.org/TR/1999/CR- DOM-Level-2-19991210/html.html#ID-63534901)。我会说你不会在一般的(或者甚至是有限的)使用中找不到一个浏览器,它不能反映元素上的“id” - 但我对你的评论的起源感兴趣。 :-) – 2012-05-14 05:36:01

+0

@T好吧,事实是,我一直在寻找关于这个几小时的参考资料,你的文章是我发现的最好的,但我仍然想要一些参考确认:-J – ajax333221 2012-05-14 14:38:31

5

你的意思是说,对于ID为“next”的select元素,你需要执行一些特定的脚本?

$("#next").change(function(){ 
    //enter code here 
});