Función onclick de JavaScript en línea

3 minutos de lectura

Avatar de usuario de Toniq
Toñiq

¿Hay alguna manera de escribir el siguiente código en línea de esa manera?

<a href="#" onClick="function(){
    //do something;
    return false;
};return false;"></a>

En lugar de hacer esto:

 <a href="#" onClick="doSomething(); return false;"></a>

 function doSomething(){
    //do something;
 }

  • ¿Por qué querrías?

    –Mike Christensen

    24/02/2014 a las 23:50

  • ¿Por qué? El código en línea es horrible y no se puede mantener o reutilizar

    – Josh Bedo

    24/02/2014 a las 23:55

  • porque lo estoy haciendo eco en la página y quiero mantenerlo restringido. y no quiero repetir doSomething varias veces.

    – Toniq

    24 de febrero de 2014 a las 23:57

  • @Toniq ¿Por qué tendrías que repetir? doSomething ¿varias veces? Declararlo una vez. Si necesita asociar ciertos datos con el <a>usar una data-* atribuir y representar información allí. Y no establezca el onclick en la etiqueta: espere a que el DOM esté listo, obtenga todo <a> elementos, y vincular un controlador de clic a cada uno, llamando doSomething y pasándole el data-* atributo que pueda necesitar.

    – Ian

    25 de febrero de 2014 a las 0:01


  • @Toniq: lo que sea que intente hacer, coloque el código en una función y llame a esa función en su onclick manipulador. Escribir más de uno o dos comandos en HTML en línea es una mala idea.

    –Mike Christensen

    25 de febrero de 2014 a las 0:02

Avatar de usuario de Mukund Kumar
Mukund Kumar

Puede utilizar funciones anónimas autoejecutables. Este código funcionará:

<a href="#" onClick="(function(){
    alert('Hey i am calling');
    return false;
})();return false;">click here</a>

  • Votar esto pero… realmente, espero que tengas una buena razón por la que estás escribiendo código en línea, por lo general es una mala práctica.

    – quoo

    5 de noviembre de 2015 a las 16:41

  • ^^ Puedo ver que es una mala práctica repetir código, pero las funciones anónimas tienen su lugar. Escribí una función que llama a un modal de confirmación boostrap personalizado. Quiero que maneje una situación de cancelación y confirme únicamente para esa instancia cuando lo necesite. Es una tontería escribir las dos funciones en otro lugar y tener que buscarlas dentro del código cuando no se reutilizan.

    – eaglei22

    9 de enero de 2017 a las 20:41

  • Mi caso de uso para esto es para descartar una pantalla de inicio de carga. El onclick elimina la pantalla de bienvenida del DOM.

    – Jared Ménard

    28 de febrero de 2018 a las 15:21

  • @JaredMenard intenta reemplazar la etiqueta de anclaje con div.

    – Mukund Kumar

    3 de marzo de 2018 a las 5:40

  • Acabo de usar este método para insertar una corrección de errores para la depuración en una página que no controlo, por lo que no pude agregar una función adicional. Es feo, pero funciona.

    – salchichas divinas

    15 de noviembre de 2018 a las 10:54

Avatar de usuario de ITomas
ITomas

Esto debería funcionar:

 <a href="#" onclick="function hi(){alert('Hi!')};hi()">click</a>

Puede insertar cualquier JavaScript dentro del onclick como si estuviera asignando el método a través de JavaScript. Creo que es solo una cuestión de hacer que el código sea más limpio manteniendo su js dentro de un bloque de script

Según la respuesta que dio @Mukund Kumar, aquí hay una versión que pasa el argumento del evento a la función anónima:

<a href="#" onClick="(function(e){
    console.log(e);
    alert('Hey i am calling');
    return false;
})(arguments[0]);return false;">click here</a>

Esto no es realmente recomendable, pero puedes hacerlo todo en línea así:

<a href="#" onClick="function test(){ /* Do something */  } test(); return false;"></a>

Pero no puedo pensar en ninguna situación en la que esto sea mejor que escribir la función en otro lugar e invocarla. onClick.

¿Ha sido útil esta solución?