2012-01-29 17 views
5

Estoy usando el siguiente código para alertar la identificación del elemento actual.Identificación de alerta del elemento actual

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

jQuery:

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

¿Por qué alerta "indefinido"? He tratado con:

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

pero avisa undefined

+1

Si usaste jQuery para agregar el controlador onclick, no estarías preguntando esto. :) – epascarello

Respuesta

4

pruebe a cambiar a:

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

Mejor, se unen al controlador de eventos con jQuery, ya que se está usando de todos modos:

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

El motivo por el que su código no funciona es t está llamando al fun() desde dentro de la función del controlador de eventos creada por el navegador para su atributo "onclick". Simplemente llamando a la función de esa manera, no proporciona ningún objeto "receptor" — nada para this, es decir. Si lo llama con .call(), sin embargo, puede hacerlo explícitamente.

1

Si pasa una cadena al evento onclick, el código en esa cadena será la función que se ejecuta. Si llama a otra función, no se definirá this.

O haces

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

el documento listo, o si debe trabajar con eventos en línea, paso this como argumento utilizar el método mostrado por puntiaguda.

9

$(this) solo funciona dentro de las funciones de jQuery; no hace referencia a nada dentro de fun(). En su lugar, intente esto:

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

Con este código HTML:

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

no es particularmente buena práctica tener onClick="" atributos en el código HTML, por lo tanto, la función $.click() dado anteriormente. Siempre debe poner su JavaScript en un archivo separado (especialmente cuando usa jQuery).

1

Cambiar el elemento que decir:

onclick="fun(this)" 

Y la función de:

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

Eso se debe a que llamó this en el ámbito global.

Sin jQuery, puede hacerlo, como a continuación:

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

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

con jQuery, puede hacerlo, como a continuación:

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

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

sólo tiene que utilizar

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

Usted sólo puede usar alert(event.target.id); dentro de la función que su elemento llama sin pasar ningún argumento a la función.

Cuestiones relacionadas