La función genera, pero lo hace cada vez que actualizo el navegador, intento que cada vez que hago clic en el botón, aparezca la cadena y luego genere una nueva. ¡¡Cualquier ayuda sería apreciada!!
<body> <button type="button" onclick="generatePassword()">GENERATE</button> <p id="demo"></p> <script> function generatePassword(length = 12) { let generatedPassword = ""; const validChars = "0123456789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + ",.-{}+!\"#$%/()=?"; for (let i = 0; i < length; i++) { let randomNumber = crypto.getRandomValues(new Uint32Array(1))[0]; randomNumber = randomNumber / 0x100000000; randomNumber = Math.floor(randomNumber * validChars.length); generatedPassword += validChars[randomNumber]; } return generatedPassword; } document.getElementById("demo").innerHTML = generatePassword(); </script> </body>Porque estás llamando a generatePassword en el código mismo. Usa esto en su lugar
<body> <button type="button" onclick="generatePassword()">GENERATE</button> <p id="demo"></p> <script> function generatePassword(length = 12) { let generatedPassword = ""; const validChars = "0123456789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + ",.-{}+!\"#$%/()=?"; for (let i = 0; i < length; i++) { let randomNumber = crypto.getRandomValues(new Uint32Array(1))[0]; randomNumber = randomNumber / 0x100000000; randomNumber = Math.floor(randomNumber * validChars.length); generatedPassword += validChars[randomNumber]; } document.getElementById("demo").innerHTML = generatedPassword; } </script> </body> O incluso mejor, no diga onclick="..." en el elemento mismo:
<body> <button type="button" id="generateButton">GENERATE</button> <p id="demo"></p> <script> function generatePassword(length = 12) { let generatedPassword = ""; const validChars = "0123456789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + ",.-{}+!\"#$%/()=?"; for (let i = 0; i < length; i++) { let randomNumber = crypto.getRandomValues(new Uint32Array(1))[0]; randomNumber = randomNumber / 0x100000000; randomNumber = Math.floor(randomNumber * validChars.length); generatedPassword += validChars[randomNumber]; } return generatedPassword; } document.getElementById("generateButton").addEventListener("click", () => document.getElementById("demo").textContent = generatePassword()); </script> </body>