¿Cuándo y por qué 'devolver falso' en JavaScript?


Respuestas:


88

A menudo, en los controladores de eventos, como onsubmitdevolver falso, es una forma de decirle al evento que no se active realmente. Entonces, digamos, en el onsubmitcaso, esto significaría que el formulario no se envía.


10
Esto es particularmente bueno si desea un formulario AJAX que se envíe sin volver a cargar la página, pero también funciona enviando y recargando la página cuando JavaScript no está disponible.
Dean Rather

10
Devolver falso es realmente excesivo para evitar la acción predeterminada al crear controladores de eventos y puede conducir a un código frágil. Explicación y ejemplos en la publicación de Douglas Neiner aquí fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang

3
Con jQuery, es mejor usarlo event.preventDefault()para esta funcionalidad. Creo que devolver falso es obsoleto y ya no funciona.
onetwopunch

1
A veces el return falseestá en el método, ¿esto cambia algo?
Francisco Corrales Morales

@onetwopunch De hecho, cuando lo cambié a e.preventDefault () resolvió un problema con una de mis funciones basadas en un evento táctil de espacio de nombres. No sé por qué, pero me diste la idea. Gracias.
Garavani

69

Supongo que te estás refiriendo al hecho de que a menudo tienes que poner un 'retorno falso'; declaración en sus controladores de eventos, es decir

<a href="#" onclick="doSomeFunction(); return false;">...

El "retorno falso"; en este caso evita que el navegador salte a la ubicación actual, como lo indica href = "#"; en cambio, solo se ejecuta doSomeFunction (). Es útil para cuando desea agregar eventos a las etiquetas de anclaje, pero no quiere que el navegador salte hacia arriba y hacia abajo a cada anclaje con cada clic


3
Por supuesto, 'href = "#"' es una mala práctica, pero su punto general sigue en pie :-)
Bobby Jack

44
@ vol7ron: la alternativa es una URL real que actúa como una alternativa para aquellas personas sin javascript. De lo contrario, simplemente harán clic en un enlace sin que ocurra nada.
Bobby Jack

3
@ vol7ron: por supuesto, depende de cada desarrollador (o propietario del sitio) determinar exactamente qué cantidad de la base de usuarios potenciales quieren atender. Sin embargo, en un caso como este, donde la opción que se dirige a más personas es TAN simple, no veo por qué no optarías por ella. Además, tenga en cuenta que no se trata solo de que las personas deshabiliten explícitamente JavaScript; puede ser: alguien que les está imponiendo esa decisión, un problema de red al descargar el archivo JS, un error en una línea del JS que hace que todo falle. Además, es bastante bueno si el clic derecho-> abrir en una pestaña nueva todavía funciona.
Bobby Jack

No es menos del 1% de los usuarios. Muchas personas usan extensiones como NoScript por una razón. Para desactivar cosas como JavaScript a propósito.
Sepero

@ vol7ron El otro escenario a tener en cuenta es cuando "javascript se rompe" (debido a un error de sintaxis más arriba en la página). Tener retrocesos que no sean js le brinda algunas redes de seguridad para este escenario. (¡Google.com estuvo inactivo durante casi 30 minutos hace un tiempo debido a un error de sintaxis js!)
Alex Czarto

28

Se utiliza para detener la propagación del evento . Verá cuando tenga dos elementos, ambos con un controlador de eventos de clic (por ejemplo)

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

Si hace clic en el elemento interno (elemento2), se activará un evento de clic en ambos elementos: 1 y 2. Se llama "burbujeo de eventos". Si desea controlar el evento solo en element2, el controlador de eventos debe devolver false para detener la propagación del evento.

Otro ejemplo será el enlace onclick handler. Si desea detener el funcionamiento de un formulario de enlace. Puede agregar un controlador onclick y devolver false. Para evitar que el evento se propague al controlador predeterminado.


9
la primera parte de esta respuesta es incorrecta: regresar falsede un controlador de eventos evitará la acción predeterminada asociada con un evento; También puede hacer esto llamando event.preventDefault()o configurando event.returnValue = false(IE); para evitar que el evento burbujee, tendrás que llamar event.stopPropagation()o configurar event.cancelBubble = true(IE)
Christoph


12

También llegué a esta página después de buscar "js, cuándo usar 'return false;' Entre los otros resultados de búsqueda se encontraba una página que encontré mucho más útil y directa, en el sitio CSS-Tricks de Chris Coyier: La diferencia entre 'return false;' y 'e.preventDefault ();'

La esencia de su artículo es:

function () {return false; }

// ES IGUAL A

función (e) {e.preventDefault (); e.stopPropagation (); }

aunque todavía recomendaría leer el artículo completo.

Actualización: después de discutir los méritos de usar return false; como un reemplazo para e.preventDefault (); & e.stopPropagation (); uno de mis compañeros de trabajo señaló que return false también detiene la ejecución de devolución de llamada, como se describe en este artículo: jQuery Events: Stop (Mis) Using Return False .


Tengo que notar aquí después de una prueba de código que: en jquery , function() { return false; }ES IGUAL A function(e) { e.preventDefault(); e.stopPropagation(); }, pero en js puro, no es lo mismo, en realidad function() { return false; }es IGUAL A. function(e) { e.preventDefault(); }Que no deja de propagación.
SkuraZZ

6

Cuando se usa la eachfunción de jQuery , devolver verdadero o falso tiene significado. Ver el documento


3

Creo que una mejor pregunta es, ¿por qué en un caso en el que está evaluando un conjunto booleano de valores de retorno, NO utilizaría verdadero / falso ? Quiero decir, probablemente podrías tener verdadero / nulo, verdadero / -1, otros misceláneos. Javascript "falsos" valores para sustituir, pero ¿por qué haría eso?


1

Cuando desee activar el código javascript desde una etiqueta de anclaje, se debe usar el controlador onclick en lugar del javascript: pseudo-protocolo. El código javascript que se ejecuta dentro del controlador onclick debe devolver verdadero o falso (o una expresión que evalúe como verdadera o falsa) de nuevo a la etiqueta en sí; si devuelve verdadero, el HREF del ancla se seguirá como un enlace normal. Si devuelve falso, se ignorará el HREF. Es por eso que "devuelve falso"; a menudo se incluye al final del código dentro de un controlador onclick.


1

Utiliza return false para evitar que algo suceda. Entonces, si tiene un script que se ejecuta en submit, return false evitará que el envío funcione.


1

Cuando se llama a una declaración de retorno en una función, se detiene la ejecución de esta función. Si se especifica, un valor dado se devuelve al llamador de la función. Si se omite la expresión, se devuelve undefined en su lugar.

Para obtener más información, consulte la página de documentos de MDNreturn .


1

return false usando solo si tiene alguna función de trabajo (por alguna prueba) o si desea detener alguna función, por ejemplo use return false al final "onsubmit"


1

Además, este breve e interesante enlace para leer a través de https://www.w3schools.com/jsref/event_preventdefault.asp

Definición y uso

El método preventDefault () cancela el evento si es cancelable, lo que significa que la acción predeterminada que pertenece al evento no ocurrirá.

Por ejemplo, esto puede ser útil cuando:

Clicking on a "Submit" button, prevent it from submitting a form
Clicking on a link, prevent the link from following the URL

Nota: No todos los eventos son cancelables. Use la propiedad cancelable para averiguar si un evento es cancelable.

Nota: El método preventDefault () no impide una mayor propagación de un evento a través del DOM. Use el método stopPropagation () para manejar esto.


Considere usar: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault como opuesto a w3schools. Pero una respuesta sólida.
Bibberty
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.