Creé una página de inicio de sesión donde puedo iniciar sesión con mi nombre de usuario y contraseña y funciona bien cuando la validé con JavaScript usando el atributo onsubmit en la etiqueta del formulario. Pero cuando lo modifico para agregar innerhtml a mi etiqueta h3 donde quiero mostrar Credencial incorrecta cuando el usuario ingresa un nombre de usuario o contraseña incorrectos, entonces no muestra lo mismo y también se redirige a la página de inicio de sesión exitosa incluso cuando he agregado retorno declaración falsa en JavaScript.
function validate(){ var uname=document.getElementById('username').value; var password=document.getElementById('password').value; var users=["mustafa","param","swapnil","abhi"]; var pwd=["1234","4567","8524","7418"] for (let i = 0; i < users.length; i++) { if((uname==users[i])&&(password==pwd[i])){ location.href("sucess.html"); return true; } } document.getElementById('wrong-output').innerHTML="Wrong details"; return false; } <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="index_js.js"></script> </head> <body> <h3 id="wrong-output" style="background-color:red"></h3> <form action="sucess.html" onsubmit="return validate()"> <label for="uname">User Name</label> <input id="username" type="text"> <br> <br> <label for="pwd">Password</label> <input type="password" id="password"><br><br> <input type="submit" value="submit"> </form> </body> </html>No devuelve true .
location.href es una cadena, no una función. Intentar llamarlo como una función arroja una excepción y finaliza el script.
Dado que el script finaliza, la función no devuelve false , por lo que el comportamiento predeterminado del controlador de eventos nunca se evita y el formulario se envía normalmente.
Si desea navegar usando location.href , debe asignarle un nuevo valor con = … pero luego la función devolverá true y el envío del formulario reemplazará esa instrucción de navegación para que no tenga ningún efecto.