2009-09-12 67 views
27

¿Es posible obtener el valor actual del atributo onClick de una etiqueta A a través de jQuery?obtener el valor de "onclick" con jQuery?

Por ejemplo, tengo:

<a href="http://www.google.com" id="google" onclick="alert('hello')">Click</a> 

Quiero obtener el código onclick para que pueda almacenarla para su uso posterior (como voy a estar cambiando el evento onclick por un rato).

¿Es posible hacer algo como:

var link_click = $("#google").onclick; 

o:

var link_click = $("#google").click; 

para que después en mi código que pueda volver a aplicar ese código, o eval() si es necesario ?

Respuesta

44

nunca he hecho esto, pero se haría así:

var script = $('#google').attr("onclick") 
+1

, usted puede obtener el atributo onclick. Pero no siempre el controlador de eventos click. –

12

mkoryak es correcta.

Pero, si los eventos están ligados a ese nodo DOM utilizando métodos más modernos (no usar onclick), entonces este método fallará.

Si eso es lo que realmente quieres, echa un vistazo a this question, y su respuesta aceptada.

¡Salud!


He vuelto a leer su pregunta.
me gustaría decir esto: no utilice onclick, onkeypress y los gustos para enlazar eventos.

el uso de mejores métodos como addEventListener() le permitirá:

  1. Añadir más de un controlador de eventos para un evento en particular
  2. eliminar algunos oyentes selectivamente

En lugar de utilizar realmente addEventListener(), se podría usar envolturas jQuery como $('selector').click().

¡Salud nuevamente!

11
$('#google').attr('onclick') + "" 

Sin embargo, Firebug muestra que esto devuelve una función 'onclick'. Puede llamar a la función más adelante utilizando el siguiente enfoque:

(new Function ($('#google').attr('onclick') + ';onclick();'))() 

... o utilizar una expresión regular para despojar a los function y obtener únicamente los estados que la integran.

+0

esto es genial! ¿Puedes explicar cómo funciona? –

+0

$ ('# google'). Attr ('onclick') contiene el valor del atributo 'onclick' (que es una cadena). Sin embargo, como los navegadores tratan los atributos del evento de una manera diferente, se devuelven con la función "onclick() {alert ('hello')}". Por lo tanto, si desea llamar directamente a la función, deberá quitar la 'función() {}' o llamarla inmediatamente. –

0

¿Podría explicar qué es exactamente lo que intenta lograr? En general, NUNCA tiene que obtener el atributo onclick de los elementos HTML. Además, no debe especificar el onclick en el elemento en sí. En su lugar, establezca el onclick dinámicamente usando JQuery.

Pero por lo que yo le entiendo, intenta cambiar entre dos funciones onclick diferentes. Lo que puede ser mejor es implementar su función onclick de tal forma que pueda manejar ambas situaciones.

$("#google").click(function() { 
    if (situation) { 
     // ... 
    } else { 
     // ... 
    } 
}); 
4

No estoy muy seguro de cómo hacer esto en jQuery ... pero esto funciona:

var x = document.getElementById('google').attributes; 
for (var i in x) { 
if (x[i].name == "onclick") alert(x[i].firstChild.data); 
} 

pero como Harshath dijo que sería mejor si usted utiliza detectores de eventos, como la eliminación y volver a agregar esta función al evento onclick puede ser problemático.

12

Esto funciona para mí

var link_click = $('#google').get(0).attributes.onclick.nodeValue; 
console.log(link_click); 
+0

Esta es la respuesta a seguir si realmente necesita acceder al texto del atributo onclick y no a las funciones o eventos vinculados. Sin embargo, debe reemplazar .get (0) .attributes.onclick.nodeValue con .get (0) .attributes.onclick.value ya que nodeValue está en desuso. –