2011-06-14 3 views
27

Как я могу получить id элемента, который вызвал функцию jQuery .change()? Функция сама работает правильно, но мне нужно определенное действие для селектора с id="next".

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

Любые идеи, почему предупреждение выше не работает?

+0

Похоже, что это работает для меня ... http://jsfiddle.net/interdream/nGtjR/1/ –

+0

Вы пытаетесь получить идентификатор выбора элемента обработчик изменения прикреплен к? – kinakuta

ответ

57

this - элемент DOM, на котором было установлено событие. this.id - его идентификатор. Не нужно обертывать его в экземпляр jQuery, чтобы получить его, свойство id отражает атрибут надежно во всех браузерах.

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

Live example

Вы не делаете это в вашем примере кода, но если вы смотрели контейнер с несколькими элементами форм, что даст вам идентификатор контейнера. Если вы хотите, идентификатор элемента, вызвавшего событие, вы могли бы получить, что из свойства event object'starget:

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

Live example

(JQuery гарантирует, что change пузыри событий, даже на IE, где он Безразлично 't изначально.)

+1

Что заставляет вас думать, что '.id' является настолько надежным? – ajax333221

+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) в DOM2 HTML, и он находится в [очень ранних версиях] (http://www.w3.org/TR/1999/CR- DOM-Level-2-19991210/html.html # ID-63534901) этого документа. Я бы сказал, что вы не найдете браузер вообще (или, возможно, даже ограниченный), который не отражает «id» на элементах, но меня интересует генезис вашего комментария. :-) –

+0

@T Ну, правда, я искал ссылки на это в течение нескольких часов, ваше сообщение было лучшим, что я нашел, но все же я хотел получить подтверждение со ссылками: -J – ajax333221

5

Вы хотите сказать, что для элемента select с идентификатором «next» вам нужно выполнить определенный скрипт?

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