2015-07-02 14 views
10

Ho una funzione chiamata in un evento onclick in un campo di controllo.Ottieni l'ID di un elemento tramite una funzione

<input type='checkbox' checked='' onclick='return changeEnable();' id='someid'> 

e la funzione

function changeEnable() 
{ 
    var val = $(this).attr('id'); 
    alert(val); 
} 

ho che ma restituisce undefined. La mia sintassi è sbagliata o mi sono perso qualcosa?

Queste caselle di controllo vengono create dinamicamente e hanno ID diversi, ecco perché voglio ottenere l'id per qualche attività.

risposta

19

Nota che this nella tua funzione changeEnable sarà il window. È necessario passare il riferimento all'elemento come parametro alla funzione:

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'> 
function changeEnable(el) { 
    var val = el.id 
    alert(val); 
} 

Oppure, come un miglioramento, utilizzare Javascript per collegare i vostri eventi per una migliore separazione degli interessi:

<input type="checkbox" id="someid"> 
$(function() { 
    $('#someid').change(function() { 
     var val = this.id 
     alert(val); 
    } 
}); 

Si noti che quanto sopra utilizza l'evento change della casella di controllo, che è meglio per motivi di accessibilità.

+0

Wow. funziona perfettamente Grazie del promemoria. Selezionerò questa risposta dopo il timer :) Grazie! – jackhammer013

+0

Nessun problema, felice di aiutare. –

+0

Ottima risposta, potenziato. Per quelli nuovi a JS (in questo caso JQuery) e che vogliono usare gli eventi JS, per questo scenario ovviamente non hai l'ID, quindi dovresti assegnare una classe agli ingressi generati '', e usa quel '$ ('. myInputClass')'. – MasNotsram

4

Credo che questo codice aiuterà ua sacco

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'>` 
function changeEnable(thisobj) 
{ 
    var val = thisobj.id; 
    alert(val); 
} 
+0

Non dimenticare il parametro nella funzione 'changeEnable'. –

+0

Grazie! Se solo potessi selezionare anche questo. – jackhammer013

+1

Si prega di spiegare perché questo aiuterà. – curiousdannii

2

uso in questo modo:

<input type='checkbox' checked='' onclick='changeEnable(this);' id='someid'> 
function changeEnable(el) 
{ 
    var val = el.id; 
    alert(val); 
} 
+0

Perché funziona? – curiousdannii

+0

funziona, provalo. Ho usato solo javascript. –

+0

Confronta la tua risposta con quella di Rory, che in realtà spiega perché il codice funziona. – curiousdannii

3

Inoltre si deve essere consapevoli del .Call metodo che getta contesto di input funzionare.

<input type='checkbox' checked='' onclick='changeEnable.call(this);' id='someid'> 

function changeEnable() 
{ 
    var val = this.id; 
    alert(val); 
} 
Problemi correlati