Quand et pourquoi «retourner faux» en JavaScript?

137

Quand et pourquoi return falseen JavaScript?

zsharp
la source

Réponses:

88

Souvent, dans les gestionnaires d'événements, tels que onsubmit, renvoyer false est un moyen d'indiquer à l'événement de ne pas se déclencher réellement. Donc, disons, dans le onsubmitcas, cela signifierait que le formulaire n'est pas soumis.

Chris Jester-Young
la source
10
Ceci est particulièrement utile si vous voulez un formulaire AJAX qui soumet sans recharger la page - mais fonctionne également en soumettant et en rechargeant la page lorsque javascript n'est pas disponible.
Dean Rather
10
Le retour false est en fait excessif pour empêcher l'action par défaut lors de la création de gestionnaires d'événements et peut conduire à un code fragile. Explication et exemples au message de Douglas Neiner ici fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang
3
Avec jQuery, il est préférable d'utiliser event.preventDefault()cette fonctionnalité. Je pense que renvoyer false est obsolète et ne fonctionne plus toujours.
onetwopunch
1
Parfois, la return falseméthode est dans la méthode, cela change quelque chose?
Francisco Corrales Morales
@onetwopunch En fait, lorsque je l'ai changé en e.preventDefault (), j'ai résolu un problème avec l'une de mes fonctions basé sur un événement tactile d'espace de noms. Je ne sais pas pourquoi mais tu m'as donné l'idée. Merci.
Garavani
69

Je suppose que vous faites référence au fait que vous devez souvent mettre un «retour faux»; déclaration dans vos gestionnaires d'événements, ie

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

Le 'return false;' dans ce cas, empêche le navigateur de sauter à l'emplacement actuel, comme indiqué par href = "#" - à la place, seule doSomeFunction () est exécutée. C'est utile lorsque vous souhaitez ajouter des événements aux balises d'ancrage, mais que vous ne voulez pas que le navigateur saute de haut en bas à chaque ancre à chaque clic

mat
la source
3
Bien sûr, le 'href = "#"' est une mauvaise pratique, mais votre point global est toujours valable :-)
Bobby Jack
4
@ vol7ron: l'alternative est une véritable URL qui agit comme une alternative pour les personnes sans javascript. Sinon, ils cliquent simplement sur un lien sans que rien ne se passe.
Bobby Jack
3
@ vol7ron: bien sûr, il appartient à chaque développeur (ou propriétaire de site) de déterminer exactement la part de la base d'utilisateurs potentiels à laquelle il souhaite répondre. Dans un cas comme celui-ci, cependant, où l'option qui cible plus de personnes est si simple, je ne vois pas pourquoi vous ne l'opteriez pas. N'oubliez pas non plus qu'il ne s'agit pas seulement de désactiver explicitement javascript; cela peut être: quelqu'un d'autre leur imposant cette décision, un problème de réseau lors du téléchargement du fichier JS, un bogue dans une ligne du JS provoquant l'échec de tout. En outre, c'est plutôt bien si un clic droit -> ouvrir dans un nouvel onglet fonctionne toujours.
Bobby Jack
Ce n'est pas moins de 1% des utilisateurs. Beaucoup de gens utilisent des extensions comme NoScript pour une raison. Pour désactiver délibérément des choses comme javascript.
Sepero
@ vol7ron L'autre scénario à considérer est lorsque "javascript casse" (en raison d'une erreur de syntaxe plus haut dans la page). Avoir des solutions de secours non-js vous donne quelques filets de sécurité pour ce scénario. (Google.com était en panne il y a près de 30 minutes en raison d'une erreur de syntaxe js!)
Alex Czarto
28

Il est utilisé pour arrêter la propagation de l'événement . Vous voyez quand vous avez deux éléments avec un gestionnaire d'événements click (par exemple)

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

Si vous cliquez sur l'élément intérieur (élément2), cela déclenchera un événement de clic dans les deux éléments: 1 et 2. Il s'appelle "Evénement bouillonnant". Si vous souhaitez gérer l'événement dans element2 uniquement, le gestionnaire d'événements doit retourner false pour arrêter la propagation de l'événement.

Un autre exemple sera le gestionnaire de lien onclick. Si vous souhaitez arrêter le fonctionnement d'un formulaire de lien. Vous pouvez ajouter un gestionnaire onclick et renvoyer false. Pour empêcher l'événement de se propager vers le gestionnaire par défaut.

Nadia Alramli
la source
9
la première partie de cette réponse est fausse: le retour falsed'un gestionnaire d'événements empêchera l'action par défaut associée à un événement; vous pouvez également le faire via un appel event.preventDefault()ou un réglage event.returnValue = false(IE); pour empêcher l'événement de bouillonner, vous devrez appeler event.stopPropagation()ou régler event.cancelBubble = true(IE)
Christoph
18

Euh ... que diriez-vous dans une fonction booléenne pour indiquer «pas vrai»?

Bobby Jack
la source
4
qu'en est-il de FileNotFound?
nickf
Même dans FileNotFound, false n'est toujours pas vrai, n'est-ce pas?
Gleb
2
Gleb: Il n'y a pas de "in FileNotFound", c'est une blague TDWTF
Chris Jester-Young
12

Je suis également venu sur cette page après avoir recherché "js, quand utiliser 'return false;' Parmi les autres résultats de recherche, il y avait une page que j'ai trouvée beaucoup plus utile et simple, sur le site CSS-Tricks de Chris Coyier: La différence entre 'return false;' et 'e.preventDefault ();'

L'essentiel de son article est:

function () {return false; }

// EST ÉGAL À

function (e) {e.preventDefault (); e.stopPropagation (); }

bien que je recommande quand même de lire l'article entier.

Mise à jour: après avoir discuté du bien-fondé de l'utilisation de return false; en remplacement de e.preventDefault (); & e.stopPropagation (); l'un de mes collègues a souligné que return false arrête également l'exécution du rappel, comme indiqué dans cet article: jQuery Events: Stop (Mis) Using Return False .

volant
la source
Je dois remarquer ici après quelques tests de code que: dans jquery , function() { return false; }EST ÉGAL À function(e) { e.preventDefault(); e.stopPropagation(); }, mais en js pur, ce n'est pas pareil, function() { return false; }EST ÉGAL À en function(e) { e.preventDefault(); }fait. Cela n'arrête pas la propagation.
SkuraZZ
6

Lorsque vous utilisez la eachfonction de jQuery , renvoyer true ou false a un sens. Voir la doc

geowa4
la source
3

Je pense qu'une meilleure question est, pourquoi dans un cas où vous évaluez un ensemble booléen de valeurs de retour, n'utiliseriez-vous PAS vrai / faux ? Je veux dire, vous pourriez probablement avoir true / null, true / -1, d'autres misc. Les valeurs Javascript «fausses» à remplacer, mais pourquoi feriez-vous cela?

Frank Rosario
la source
1

Lorsque vous souhaitez déclencher du code javascript à partir d'une balise d'ancrage, le gestionnaire onclick doit être utilisé plutôt que le pseudo-protocole javascript:. Le code javascript qui s'exécute dans le gestionnaire onclick doit renvoyer true ou false (ou une expression qui évalue à true ou false) à la balise elle-même - si elle renvoie true, alors le HREF de l'ancre sera suivi comme un lien normal. S'il renvoie false, alors le HREF sera ignoré. C'est pourquoi «return false»; est souvent inclus à la fin du code dans un gestionnaire onclick.

Jamna
la source
1

Vous utilisez return false pour éviter que quelque chose ne se produise. Donc, si vous avez un script en cours d'exécution lors de la soumission, return false empêchera l'envoi de fonctionner.

rhysclay
la source
1

Lorsqu'une instruction return est appelée dans une fonction, l'exécution de cette fonction est arrêtée. Si spécifié, une valeur donnée est renvoyée à l'appelant de la fonction. Si l'expression est omise, undefined est renvoyé à la place.

Pour en savoir plus, consultez la page de documentation MDN pourreturn .

habibun
la source
1

retourne false en utilisant uniquement si vous avez une fonction usée (par un test) ou si vous voulez arrêter une fonction, par exemple utilisez return false à la fin "onsubmit"

Abdul Aziz Al Basyir
la source
1

Aussi, ce lien court et intéressant à lire https://www.w3schools.com/jsref/event_preventdefault.asp

Définition et utilisation

La méthode preventDefault () annule l'événement s'il est annulable, ce qui signifie que l'action par défaut qui appartient à l'événement ne se produira pas.

Par exemple, cela peut être utile lorsque:

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

Remarque: tous les événements ne sont pas annulables. Utilisez la propriété annulable pour savoir si un événement est annulable.

Remarque: La méthode preventDefault () n'empêche pas la propagation ultérieure d'un événement à travers le DOM. Utilisez la méthode stopPropagation () pour gérer cela.

jet2016
la source
Pensez à utiliser: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault par opposition à w3schools. Mais réponse solide.
Bibberty