Quando e perché "restituire false" in JavaScript?


Risposte:


88

Spesso, i gestori di eventi, come ad esempio onsubmit, restituire false sono un modo per dire all'evento di non effettivamente sparare. Ad esempio, nel onsubmitcaso ciò significherebbe che il modulo non è stato inviato.


10
Ciò è particolarmente utile se si desidera un modulo AJAX che invia senza ricaricare la pagina, ma funziona anche inviando e ricaricando la pagina quando javascript non è disponibile.
Decano Piuttosto

10
Return false è in realtà eccessivo per impedire l'azione predefinita durante la creazione di gestori di eventi e può portare a codice fragile. Spiegazione ed esempi sul post di Douglas Neiner qui fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marchese Wang

3
Con jQuery, è meglio utilizzarlo event.preventDefault()per questa funzionalità. Credo che restituire false sia deprecato e non sempre funziona più.
onetwopunch

1
A volte return falseè nel metodo, questo cambia qualcosa?
Francisco Corrales Morales,

@onetwopunch In effetti quando l'ho cambiato in e.preventDefault () ho risolto un problema con una delle mie funzioni basato su un evento touch dello spazio dei nomi. Non so perché ma mi hai dato l'idea. Grazie.
Garavani,

69

Immagino che ti riferisci al fatto che spesso devi mettere un "ritorno falso"; dichiarazione nei gestori di eventi, ad es

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

Il 'return false;' in questo caso impedisce al browser di saltare alla posizione corrente, come indicato da href = "#" - invece, viene eseguito solo doSomeFunction (). È utile quando si desidera aggiungere eventi ai tag di ancoraggio, ma non si desidera che il browser salti su e giù su ciascun ancoraggio ad ogni clic


3
Certo, il 'href = "#"' è una cattiva pratica, ma il tuo punto complessivo rimane valido :-)
Bobby Jack,

4
@ vol7ron: l'alternativa è un vero URL che funge da alternativa per quelle persone senza javascript. Altrimenti, faranno semplicemente clic su un collegamento senza che accada nulla.
Bobby Jack,

3
@ vol7ron: ovviamente, dipende da ogni singolo sviluppatore (o proprietario del sito) determinare esattamente quanta parte della potenziale base di utenti desidera soddisfare. In un caso come questo, tuttavia, in cui l'opzione che ha come target più persone è COSÌ semplice, non vedo perché non si debba optare per questo. Inoltre, tieni presente che non si tratta solo di disabilitare esplicitamente javascript; può essere: qualcun altro impone quella decisione, un problema di rete durante il download del file JS, un bug in una riga del JS che causa il fallimento di tutto. Inoltre, è abbastanza bello se il clic destro-> apri in una nuova scheda funziona ancora.
Bobby Jack,

Non è inferiore all'1% degli utenti. Molte persone usano estensioni come NoScript per un motivo. Per disattivare intenzionalmente cose come JavaScript.
Sepero,

@ vol7ron L'altro scenario da considerare è quando "javascript si interrompe" (a causa di un errore di sintassi più in alto nella pagina). Avere fallback non js ti dà alcune reti di sicurezza per questo scenario. (Google.com è rimasto inattivo per quasi 30 minuti a causa di un errore di sintassi js!)
Alex Czarto

28

Viene utilizzato per interrompere la propagazione dell'evento . Si vede quando si hanno due elementi entrambi con un gestore eventi click (ad esempio)

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

Se si fa clic sull'elemento interno (element2), si attiverà un evento click in entrambi gli elementi: 1 e 2. Si chiama "Evento bubbling". Se si desidera gestire l'evento solo in element2, il gestore eventi deve restituire false per interrompere la propagazione dell'evento.

Un altro esempio sarà il gestore del collegamento onclick. Se si desidera interrompere il funzionamento di un modulo di collegamento. È possibile aggiungere un gestore onclick e restituire false. Per impedire la propagazione dell'evento al gestore predefinito.


9
la prima parte di questa risposta è errata: il ritorno falseda un gestore di eventi impedirà l'azione predefinita associata a un evento; potresti anche farlo tramite chiamata event.preventDefault()o impostazione event.returnValue = false(IE); per fermare il gorgoglio dell'evento, dovrai chiamare event.stopPropagation()o impostare event.cancelBubble = true(IE)
Christoph,


12

Sono venuto anche a questa pagina dopo aver cercato "js, quando usare" return false; " Tra gli altri risultati della ricerca c'era una pagina che ho trovato molto più utile e semplice, sul sito CSS-Tricks di Chris Coyier: La differenza tra 'return false;' e 'e.preventDefault ();'

L'essenza del suo articolo è:

function () {return false; }

// È UGUALE A

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

anche se consiglierei comunque di leggere l'intero articolo.

Aggiornamento: dopo aver discusso i meriti dell'utilizzo di return false; in sostituzione di e.preventDefault (); & e.stopPropagation (); uno dei miei colleghi ha sottolineato che return false interrompe anche l'esecuzione della richiamata, come indicato in questo articolo: jQuery Events: Stop (Mis) utilizzando Return False .


Devo notare qui dopo alcuni test del codice che: in jquery , function() { return false; }È function(e) { e.preventDefault(); e.stopPropagation(); }uguale a, ma in puro js, ​​non è lo stesso, function() { return false; }è uguale a function(e) { e.preventDefault(); }effettivamente. E non si ferma la propagazione.
SkuraZZ,

6

Quando si utilizza la eachfunzione di jQuery , restituire true o false ha un significato. Vedi il documento


3

Penso che una domanda migliore sia: perché in un caso in cui stai valutando un set booleano di valori di ritorno, NON useresti true / false ? Voglio dire, probabilmente potresti avere true / null, true / -1, altri misc. Javascript "falsa" i valori da sostituire, ma perché dovresti farlo?


1

Quando si desidera attivare il codice javascript da un tag anchor, è necessario utilizzare il gestore onclick anziché il javascript: pseudo-protocollo. Il codice javascript che viene eseguito all'interno del gestore onclick deve restituire vero o falso (o un'espressione che valuta vero o falso) al tag stesso - se restituisce vero, l'HREF dell'ancora verrà seguito come un normale collegamento. Se restituisce false, l'HREF verrà ignorato. Questo è il motivo per cui "return false;" è spesso incluso alla fine del codice all'interno di un gestore onclick.


1

Si utilizza return false per impedire che accada qualcosa. Quindi, se hai uno script in esecuzione su submit, return false impedirà il funzionamento di submit.


1

Quando viene richiamata un'istruzione return in una funzione, l'esecuzione di questa funzione viene interrotta. Se specificato, un determinato valore viene restituito al chiamante della funzione. Se l'espressione viene omessa, viene invece restituito undefined.

Per ulteriori informazioni, consulta la pagina dei documenti MDN perreturn .


1

restituisce false usando solo se hai qualche funzione indossata (da alcuni test) o vuoi fermare una funzione, ad esempio usa return false alla fine "onsubmit"


1

Inoltre, questo breve e interessante link da leggere attraverso https://www.w3schools.com/jsref/event_preventdefault.asp

Definizione e utilizzo

Il metodo preventDefault () annulla l'evento se è annullabile, il che significa che l'azione predefinita che appartiene all'evento non si verificherà.

Ad esempio, questo può essere utile quando:

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

Nota: non tutti gli eventi sono cancellabili. Utilizzare la proprietà annullabile per scoprire se un evento è annullabile.

Nota: il metodo preventDefault () non impedisce l'ulteriore propagazione di un evento attraverso il DOM. Utilizzare il metodo stopPropagation () per gestire questo.


Prendi in considerazione l'utilizzo di developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault come opposto w3schools. Ma una risposta solida.
Bibberty,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.