Quando e por que 'retornar falso' em JavaScript?


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.


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


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.


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


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 .


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


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?


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.


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.


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 .


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"


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.


Considere usar: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault em oposição a w3schools. Mas resposta sólida.
Bibberty
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.