Estoy tratando de usar onclick para llamar a una function cuando el usuario hace clic en el botón, que parece no funcionar.
Por ejemplo:
function click(){ console.log('you click it!') } <input type='button' id='submitbutton' value = 'Submit' onclick= 'click(); console.log("you used it in HTML")'>console.log Inicie sesión al hacer onclick , no aparecerá ningún mensaje en la console . function click(){ console.log('you click it!') } <input type='button' id='submitbutton' value = 'Submit' onclick= "click();"> El botón console el mensaje you used it in HTML que escribo directamente dentro de onclick , pero no ejecutará la función click() que le asigné.
Creo que no es el problema de input[type='button'] ya que podríamos usar onclick en input[type='button'] . por ejemplo
¿Alguien podría explicarme qué hace que el código no funcione? Sé que la solución para esto probablemente sea usar addEventListener , pero ¿por qué no funciona?
El posible duplicado del botón de JavaScript al hacer clic no funciona , pero esta pregunta solo sugiere la solución sin explicar el motivo.
¡Gracias por cualquier respuesta!
Los controladores en línea tienen una cadena de alcance muy, muy peculiar, y por esa razón (entre otras) no deben usarse, porque su comportamiento puede ser poco intuitivo.
Aquí, click se refiere al prototipo de .click on HTMLElement:
<input type='button' id='submitbutton' value = 'Submit' onclick= 'console.log(click === HTMLElement.prototype.click)'> Entonces, su function click y su click() hacen referencia a cosas diferentes. Cuando haces clic:
HTMLElement.prototype.click en el botón, lo que dará como resultado que se envíe un segundo evento de forma sincrónica, lo que nuevamente activará el mismo controlador. Sin embargo, no entrará en un bucle infinito, porque .click() tiene un indicador especial para evitar que eso suceda exactamente. Luego, you used it in HTML se registra.you used it in HTML se registrará nuevamente, desde el controlador en línea.Otra forma de verlo:
.click() en el controlador en líneaUse un nombre diferente para la función o, mejor aún, evite los controladores en línea por completo.
Hola El error es este: click() es una función de javascript, cambie el nombre a otro. Más información: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
function clicka(){ console.log('you click it!') } <input type='button' id='submitbutton' value='Submit' onclick='clicka();console.log("you used it in HTML")'>