2011-06-14 16 views
27

Come posso ottenere il id dell'elemento che ha attivato la funzione jQuery .change()? La funzione stessa funziona correttamente, ma ho bisogno di un'azione specifica per un selettore con id="next".

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

Qualche motivo per cui l'avviso sopra non funziona?

+0

Sembra che lavora per me ... http://jsfiddle.net/interdream/nGtjR/1/ –

+0

Stai cercando di ottenere l'id dell'elemento selezionare il vostro gestore di cambio è collegata? – kinakuta

risposta

57

this è l'elemento DOM su cui è stato agganciato l'evento. this.id è il suo ID. Non è necessario avvolgerlo in un'istanza di jQuery per ottenerlo, la proprietà id riflette l'attributo in modo affidabile su tutti i browser.

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

Live example

Non stai facendo questo nel tuo esempio di codice, ma se si stesse guardando un contenitore con diversi elementi del modulo, che darebbe l'ID della container. Se si desidera che l'ID dell'elemento che ha attivato l'evento, si potrebbe ottenere che dalla proprietà event object'starget:

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

Live example

(jQuery assicura che i change bolle caso, anche su IE dove doesn 't in modo nativo.)

+1

Cosa ti fa pensare che '.id' sia affidabile? – ajax333221

+1

@ ajax333221: hai qualche motivo per pensarla diversamente? L'ho usato in IE5.5 in poi, Chrome e Firefox da quando hanno iniziato, il vecchio Netscape Navigator, Opera per più di un decennio, Safari, Konqueror, Midori, ecc. È [specificato] (http: //www.w3 .org/TR/DOM-Level-2-HTML/html.html # ID-63534901) in DOM2 HTML, ed è in [versioni molto antiche] (http://www.w3.org/TR/1999/CR- DOM-Level-2-19991210/html.html # ID-63534901) di quel documento. Direi che non troverai un browser in generale (o probabilmente anche limitato) che non rispecchi 'id' sugli elementi - ma sono interessato alla genesi del tuo commento. :-) –

+0

@ Bene, la verità è che cercavo riferimenti su questo per ore, il tuo post è stato il migliore che ho trovato, ma volevo ancora qualche conferma con i riferimenti: -J – ajax333221

5

Vuoi dire che per un elemento di selezione con un ID di "prossimo" è necessario eseguire uno script specifico?

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