¿Por qué "return false" no funciona?
importancia: 3
¿Por qué en el código de abajo return false no funciona en absoluto?
<script>
function handler() {
alert( "..." );
return false;
}
</script>
<a href="/?originalUrl=https%3A%2F%2Fes.javascript.info%2F%26quot%3Bhttps%3A%2F%2Fw3.org%26quot%3B%2520onclick%3D%26quot%3Bhandler()%26quot%3B%26gt%3Bel%2520navegador%2520ir%25C3%25A1%2520a%2520w3.org%26lt%3B%2Fa%26gt%3B%253C%2Fcode">
El navegador sigue la URL al hacer clic, pero no la queremos.
¿Como se arregla?
Cuando el navegador lee un atributo on* como onclick, crea el controlador a partir de su contenido.
Para onclick="handler()" la función será:
function(event) {
handler() // el contenido de onclick
}
Ahora podemos ver que el valor devuelto por handler() no se usa y no afecta el resultado.
La solución es simple:
<script>
function handler() {
alert("...");
return false;
}
</script>
<a href="/?originalUrl=https%3A%2F%2Fes.javascript.info%2F%26quot%3Bhttps%3A%2F%2Fw3.org%26quot%3B%2520onclick%3D%26quot%3Breturn%2520handler()%26quot%3B%26gt%3Bw3.org%26lt%3B%2Fa%26gt%3B%253C%2Fcode">
También podemos usar event.preventDefault(), así:
<script>
function handler(event) {
alert("...");
event.preventDefault();
}
</script>
<a href="/?originalUrl=https%3A%2F%2Fes.javascript.info%2F%26quot%3Bhttps%3A%2F%2Fw3.org%26quot%3B%2520onclick%3D%26quot%3Bhandler(event)%26quot%3B%26gt%3Bw3.org%26lt%3B%2Fa%26gt%3B%253C%2Fcode">