2012-01-29 15 views
5

Sto usando il seguente codice per avvisare l'id dell'elemento corrente.ID avviso dell'elemento corrente

<input type="text" id="desc" name="txtTitle" onclick="fun()"> 

jquery:

function fun() { 
    var currentId = $(this).attr('id'); 
    alert(currentId); 
} 

Perché si Alert "indefinito"? Ho provato con:

var currentId =$('element').attr('id'); 
// and 
alert($(this).id); 
// and 
alert(this.id); 

ma gli avvisi undefined

+1

Se si è utilizzato jQuery per aggiungere il gestore onclick, non lo si chiederebbe. :) – epascarello

risposta

4

provare a cambiare a:

<input type="text" id="desc" name="txtTitle" onclick="fun.call(this)"> 

Meglio, vincolare il proprio gestore di eventi con jQuery, dal momento che lo si usa in ogni caso:

$(function() { $('#desc').click(fun); }); 

Il motivo per cui il codice non funziona è t che stai chiamando fun() dall'interno della funzione di gestore di eventi costruita dal browser per il tuo attributo "onclick". Chiamando semplicemente la funzione in questo modo, non si fornisce alcun oggetto "destinatario" — per this, vale a dire. Se lo chiami con .call() puoi farlo esplicitamente.

1

Se si passa una stringa all'evento onclick, il codice in quella stringa sarà la funzione che viene eseguita. Se chiama un'altra funzione, non sarà definito this.

O fare

$("#desc").click(fun) 

sul documento pronto, o se si deve lavorare con gli eventi in linea, passa this come argomento utilizzare il metodo indicato dalla punta.

9

$(this) funziona solo all'interno delle funzioni jQuery; non fa riferimento a nulla all'interno di fun(). Invece, provate questo:

$('input#desc').click(function() { 
    alert($(this).attr('id')); 
}); 

Con questo HTML:

<input type="text" id="desc" name="txtTitle"> 

non è particolarmente buona pratica avere onClick="" attributi nel codice HTML, quindi la funzione di $.click() di cui sopra. Devi sempre inserire il tuo JavaScript in un file separato (specialmente quando usi jQuery).

1

Cambiare l'elemento da dire:

onclick="fun(this)" 

E la funzione di:

function fun(elem) 
{ 
    var currentId = $(elem).attr("id"); 
} 
0

Questo è perché hai chiamato this in ambito globale.

Senza di jQuery, si può fare come di seguito:

<input type="text" id="desc" name="txtTitle" onclick="fun(this)"> 

function fun(el) { 
    alert(el.id); 
} 

Con jQuery, potete fare come di seguito:

<input type="text" id="desc" name="txtTitle"> 

$(function(){ 
    $('input[type="text"]').click(function(){ 
     alert(this.id); 
    }); 
}); 
2

basta usare

alert($(this).attr('id')); 
1

Si può semplicemente utilizzare alert(event.target.id); all'interno della funzione che viene chiamata dal tuo elemento senza passare alcun argomento alla funzione.

Problemi correlati