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;
}
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
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
.
¿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 unadata-*
atribuir y representar información allí. Y no establezca elonclick
en la etiqueta: espere a que el DOM esté listo, obtenga todo<a>
elementos, y vincular un controlador de clic a cada uno, llamandodoSomething
y pasándole eldata-*
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