La función formValidation () devuelve falso pero no impide el envío del formulario
<body> <script> function formValidation(){ return false; } </script> <form onsubmit="formValidation()" method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <label for="email">Email:</label><br> <input type="email" name="email" id="email"><br><br> <input type="submit" name="submit" value="submit"> </form> </body>Cuando he usado la función de retorno al frente de la función formValidation (), está funcionando
<body> <script> function formValidation(){ return false; } </script> <form onsubmit="return formValidation()" method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <label for="email">Email:</label><br> <input type="email" name="email" id="email"><br><br> <input type="submit" name="submit" value="submit"> </form> </body>Los controladores en línea como estos se convierten esencialmente en un cuerpo de función. Dicha función se ejecuta cuando se dispara el evento.
function theHandler() { // Attribute string goes here }Si la función devuelve falso, se evita la acción predeterminada del evento (como enviar el formulario).
<form onsubmit="formValidation()"no funciona porque la función construida que se ejecuta no devuelve nada:
function theHandler() { formValidation() }Pero
<form onsubmit="return formValidation()"funciona porque entonces la función construida es como
function theHandler() { return formValidation() }Es algo confuso, y es una de las (muchas) razones por las que nunca debe usar controladores en línea. Adjunte el detector de eventos correctamente usando JavaScript en su lugar.
document.querySelector('form').addEventListener('submit', formValidation);