Quando e por que 'retornar falso' em JavaScript?

137

Quando e por que return falseem JavaScript?

zsharp
fonte

Respostas:

88

Freqüentemente, em manipuladores de eventos, como onsubmitretornar false, é uma maneira de dizer ao evento para não realmente disparar. Então, digamos, no onsubmitcaso, isso significaria que o formulário não foi enviado.

Chris Jester-Young
fonte
10
Isso é particularmente bom se você deseja um formulário AJAX que é enviado sem recarregar a página - mas também funciona enviando e recarregando a página quando o javascript não está disponível.
13139 Dean Rather
10
Return false é realmente um exagero por impedir a ação padrão ao criar manipuladores de eventos e pode levar a códigos frágeis. Explicação e exemplos no post de Douglas Neiner aqui fuelyourcoding.com/jquery-events-stop-misusing-return-false #
Marquis Wang
3
Com o jQuery, é melhor usar event.preventDefault()para essa funcionalidade. Eu acredito que retornar falso é preterido e nem sempre funciona mais.
Onetwopunch 24/03
1
Às vezes o return falsemétodo está no método, isso muda alguma coisa?
Francisco Corrales Morales
@onetwopunch De fato, quando eu mudei para e.preventDefault () resolvi um problema com uma das minhas funções com base em um evento de toque no namespace. Não sei por que, mas você me deu a ideia. Obrigado.
Garavani
69

Suponho que você esteja se referindo ao fato de que muitas vezes precisa colocar um 'retorno falso'; em seus manipuladores de eventos, ou seja,

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

O 'retorno falso'; nesse caso, impede que o navegador salte para o local atual, conforme indicado por href = "#" - em vez disso, apenas doSomeFunction () é executado. É útil quando você deseja adicionar eventos às tags de âncora, mas não deseja que o navegador salte para cima e para baixo em cada âncora em cada clique

mate
fonte
3
Claro, o 'href = '#'' é uma prática ruim, mas o seu ponto geral ainda está :-)
Bobby Jack
4
@ vol7ron: a alternativa é uma URL real que funciona como uma alternativa para as pessoas sem javascript. Caso contrário, eles estarão apenas clicando em um link sem que nada aconteça.
Bobby Jack
3
@ vol7ron: é claro, cabe a todo desenvolvedor (ou proprietário do site) determinar exatamente quanto da base de usuários em potencial eles desejam atender. Em um caso como esse, no entanto, onde a opção que visa mais pessoas é TÃO simples, não vejo por que você não optou por ela. Além disso, lembre-se de que não se trata apenas de pessoas que desabilitam explicitamente o javascript; pode ser: outra pessoa impondo essa decisão a eles, um problema de rede ao baixar o arquivo JS, um bug em uma linha do JS fazendo com que tudo falhe. Além disso, é muito bom se clicar com o botão direito-> abrir em uma nova guia ainda funcionar.
Bobby Jack
Não é menos de 1% dos usuários. Muitas pessoas usam extensões como NoScript por um motivo. Para desativar intencionalmente o javascript.
Sepero
@ vol7ron O outro cenário a considerar é quando "o javascript quebra" (devido a um erro de sintaxe acima na página). Ter fallbacks não-js fornece algumas redes de segurança para esse cenário. (Google.com foi para baixo por quase 30 minutos por volta, enquanto devido a erro de uma sintaxe js!)
Alex Czarto
28

É usado para parar a propagação do evento . Você vê quando possui dois elementos, ambos com um manipulador de eventos click (por exemplo)

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

Se você clicar no elemento interno (elemento2), ele disparará um evento de clique nos dois elementos: 1 e 2. É chamado de "Evento com bolhas". Se você quiser manipular o evento apenas no elemento2, o manipulador de eventos precisará retornar false para interromper a propagação do evento.

Outro exemplo será o manipulador de link onclick. Se você deseja interromper o funcionamento de um formulário de link. Você pode adicionar um manipulador onclick e retornar false. Para impedir que o evento seja propagado para o manipulador padrão.

Nadia Alramli
fonte
9
a primeira parte desta resposta está incorreta: retornar falsede um manipulador de eventos impedirá a ação padrão associada a um evento; você também pode fazer isso via chamada event.preventDefault()ou configuração event.returnValue = false(IE); a fim de parar o evento a partir borbulhante, você tem que chamar event.stopPropagation()ou configuração event.cancelBubble = true(IE)
Christoph
18

Er ... que tal em uma função booleana para indicar 'não é verdade'?

Bobby Jack
fonte
4
e quanto a FileNotFound?
nickf
Mesmo em FileNotFound false ainda não é verdade, não é?
Gleb
2
Gleb: Não há nenhum "em FileNotFound", é uma TDWTF piada: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Chris Jester-Young
12

Eu também vim a esta página depois de pesquisar "js, quando usar 'return false;' Entre os outros resultados da pesquisa, havia uma página que achei muito mais útil e direta, no site CSS-Tricks de Chris Coyier: A diferença entre 'return false;' e 'e.preventDefault ();'

A essência do seu artigo é:

function () {return false; }

// É IGUAL A

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

embora eu ainda recomendo a leitura do artigo inteiro.

Atualização: Depois de discutir os méritos do uso de return false; como um substituto para e.preventDefault (); & e.stopPropagation (); um de meus colegas de trabalho apontou que o retorno falso também interrompe a execução do retorno de chamada, conforme descrito neste artigo: Eventos do jQuery: Stop (Mis) usando Return False .

vôo
fonte
Tenho que notar aqui, depois de algum teste de código, que: em jquery , function() { return false; }É IGUAL A function(e) { e.preventDefault(); e.stopPropagation(); }, mas em js puro, não é o mesmo, function() { return false; }É IGUAL DE function(e) { e.preventDefault(); }fato. Ele não parar de propagação.
SkuraZZ 25/02/19
6

Ao usar a eachfunção do jQuery , retornar verdadeiro ou falso tem significado. Veja o documento

geowa4
fonte
3

Penso que uma pergunta melhor é: por que, em um caso em que você está avaliando um conjunto booleano de valores de retorno, você NÃO usaria verdadeiro / falso ? Quero dizer, você provavelmente poderia ter true / null, true / -1, outras misc. Javascript "falsy" valores para substituir, mas por que você faria isso?

Frank Rosario
fonte
1

Quando você deseja acionar o código javascript a partir de uma tag de âncora, o manipulador onclick deve ser usado em vez do pseudo-protocolo javascript:. O código javascript executado no manipulador onclick deve retornar true ou false (ou uma expressão que seja avaliada como true ou false) de volta para a própria tag - se retornar true, o HREF da âncora será seguido como um link normal. Se retornar falso, o HREF será ignorado. É por isso que "return false"; é frequentemente incluído no final do código em um manipulador onclick.

Jamna
fonte
1

Você usa return false para impedir que algo aconteça. Portanto, se você tiver um script em execução no envio, o retorno false impedirá o envio do trabalho.

rhysclay
fonte
1

Quando uma declaração de retorno é chamada em uma função, a execução dessa função é interrompida. Se especificado, um determinado valor é retornado ao chamador da função. Se a expressão for omitida, undefined será retornado.

Para mais, consulte a página de documentosreturn do MDN .

habibun
fonte
1

return false usando apenas se você tiver alguma função desgastada (por algum teste) ou quiser interromper alguma função, por exemplo, use return false no final "onsubmit"

Abdul Aziz Al Basyir
fonte
1

Além disso, este link curto e interessante para ler em https://www.w3schools.com/jsref/event_preventdefault.asp

Definição e Uso

O método preventDefault () cancela o evento se for cancelável, o que significa que a ação padrão que pertence ao evento não ocorrerá.

Por exemplo, isso pode ser útil quando:

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

Nota: nem todos os eventos são canceláveis. Use a propriedade cancelable para descobrir se um evento é cancelável.

Nota: O método preventDefault () não impede a propagação adicional de um evento através do DOM. Use o método stopPropagation () para lidar com isso.

jet2016
fonte
Considere usar: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault em oposição a w3schools. Mas resposta sólida.
Bibberty