Quando quero impedir que outros manipuladores de eventos sejam executados após um determinado evento ser disparado, posso usar uma das duas técnicas. Vou usar o jQuery nos exemplos, mas isso também se aplica ao JS simples:
1 event.preventDefault()
$('a').click(function (e) {
// custom handling here
e.preventDefault();
});
2) return false
$('a').click(function () {
// custom handling here
return false;
});
Existe alguma diferença significativa entre esses dois métodos para interromper a propagação de eventos?
Para mim, return false;
é mais simples, mais curto e provavelmente menos propenso a erros do que executar um método. Com o método, você deve se lembrar sobre invólucro, parênteses etc.
Além disso, eu tenho que definir o primeiro parâmetro no retorno de chamada para poder chamar o método. Talvez, existam algumas razões pelas quais eu deveria evitar fazê-lo dessa maneira e usá-lo preventDefault
? Qual é a melhor maneira?
preventDefault
que não impede que outros diretos de execução. É para isso questopImmediatePropagation
serve.Respostas:
return false
de dentro de um manipulador de eventos jQuery é efetivamente o mesmo que chamar ambose.preventDefault
ee.stopPropagation
o objeto jQuery.Event transmitido .e.preventDefault()
impedirá que o evento padrão ocorra,e.stopPropagation()
impedirá que o evento borbulhe ereturn false
fará as duas coisas. Observe que esse comportamento difere normais (não-jQuery) manipuladores de eventos, em que, nomeadamente,return false
faz não parar o evento de borbulhando.Fonte: John Resig
Algum benefício em usar event.preventDefault () em vez de "return false" para cancelar um clique href?
fonte
return false
de um manipulador DOM2 (addEventListener
) não faz nada (não impede o padrão nem para de borbulhar; de um manipulador Microsoft DOM2-ish (attachEvent
), impede o padrão, mas não borbulha; de um manipulador DOM0 (onclick="return ..."
), impede o padrão (fornecido você inclui oreturn
atributo in), mas não borbulha; de um manipulador de eventos jQuery, ele faz as duas coisas, porque isso é uma coisa do jQuery Detalhes e testes ao vivo aquireturn false
se não parar a propagação do evento em manipuladores de eventos não-jQuery. isto<a href="#" onclick="return false">Test</a>
é, não impede que o evento borbulhe.Pela minha experiência, há pelo menos uma vantagem clara ao usar event.preventDefault () sobre o retorno de false. Suponha que você esteja capturando o evento click em uma tag de âncora, caso contrário, seria um grande problema se o usuário fosse navegado para fora da página atual. Se o seu manipulador de cliques usar return false para impedir a navegação no navegador, ele abrirá a possibilidade de o intérprete não alcançar a declaração de retorno e o navegador continuará executando o comportamento padrão da tag anchor.
O benefício de usar event.preventDefault () é que você pode adicioná-lo como a primeira linha no manipulador, garantindo assim que o comportamento padrão da âncora não seja acionado, independentemente se a última linha da função não for atingida (por exemplo, erro de tempo de execução )
fonte
Esta não é, como você a intitulou, uma pergunta "JavaScript"; é uma pergunta sobre o design do jQuery.
O jQuery e a citação anteriormente vinculada de John Resig (na mensagem de karim79 ) parecem ser o mal-entendido de como os manipuladores de eventos em geral funcionam.
Fato: Um manipulador de eventos que retorna false impede a ação padrão para esse evento. Não para a propagação do evento. Os manipuladores de eventos sempre funcionaram dessa maneira, desde os tempos antigos do Netscape Navigator.
A documentação do MDN explica como funciona
return false
em um manipulador de eventosO que acontece no jQuery não é o mesmo que acontece com os manipuladores de eventos. Os ouvintes de eventos DOM e os eventos "anexados" do MSIE são uma questão totalmente diferente.
Para obter mais informações, consulte attachEvent no MSDN e a documentação do W3C DOM 2 Events .
fonte
return false
o mesmo queevent.preventDefault()
. Mas eu não sei; é o suficiente para me fazer tomar isso com uma pitada de sal.jQuery
é apenas um subconjunto de JavaScript, não sua própria linguagem.Geralmente, sua primeira opção (
preventDefault()
) é a que você deve escolher, mas você precisa saber em que contexto está e quais são seus objetivos.Abasteça sua codificação tem um grande artigo sobre
return false;
vsevent.preventDefault()
vsevent.stopPropagation()
vsevent.stopImmediatePropagation()
.fonte
Ao usar o jQuery, você
return false
faz três coisas separadas quando você o chama:event.preventDefault();
event.stopPropagation();
Consulte Eventos do jQuery: Pare (Mis) usando Return False para obter mais informações e exemplos.
fonte
Você pode pendurar muitas funções no
onClick
evento para um elemento. Como você pode ter certeza de quefalse
aquele será o último a disparar?preventDefault
por outro lado, impedirá definitivamente apenas o comportamento padrão do elemento.fonte
eu acho que
event.preventDefault()
é a maneira especificada pelo w3c de cancelar eventos.
Você pode ler isso na especificação do W3C em Cancelamento de evento .
Além disso, você não pode usar return false em todas as situações. Ao atribuir uma função javascript no atributo href e se você retornar false, o usuário será redirecionado para uma página com a string falsa gravada.
fonte
<a href="javascript:return false"
algo assim?Eu acho que a melhor maneira de fazer isso é usar,
event.preventDefault()
porque se alguma exceção for levantada no manipulador, afalse
declaração de retorno será ignorada e o comportamento será oposto ao que você deseja.Mas se você tiver certeza de que o código não acionará nenhuma exceção, poderá seguir o método que desejar.
Se você ainda deseja acompanhar o retorno
false
, pode colocar todo o código do manipulador em um bloco try catch como abaixo:fonte
Minha opinião da minha experiência dizendo que é sempre melhor usar
Praticamente para parar ou impedir o envio de eventos, sempre que solicitamos, em vez de
return false
event.preventDefault()
funcionar bem.fonte
preventDefault
é algumas palavras em inglês eu entendo "impede o padrão".return false
são algumas palavras em inglês que eu entendo "retorna falso", mas não tenho idéia do porquê até pesquisar no Google esse código enigmático. E bônus, eu posso controlar separadamentestopPropagation
epreventDefault
.A principal diferença entre
return false
eevent.preventDefault()
é que seu código abaixoreturn false
não será executado e emevent.preventDefault()
caso seja executado após esta instrução.Quando você escreve return false, faz o seguinte para você nos bastidores.
fonte
e.preventDefault ();
Simplesmente interrompe a ação padrão de um elemento.
impede que o hiperlink siga o URL, impede que o botão enviar envie o formulário. Quando você tem muitos manipuladores de eventos e deseja apenas impedir que eventos padrão ocorram e ocorram várias vezes, precisamos usar na parte superior da função ().
A razão para usar
e.preventDefault();
é que, em nosso código, para que algo dê errado no código, ele permitirá a execução do link ou formulário a ser enviado ou a execução ou permissão de qualquer ação que você precise executar. O botão & link ou submit será enviado e ainda permitirá a propagação do evento.retorna falso;
Simplesmente interrompe a execução da função ().
"
return false;
" encerrará toda a execução do processo.O motivo para usar return false; é que você não deseja mais executar a função no modo estrito.
fonte
Basicamente, dessa maneira, você combina as coisas porque o jQuery é uma estrutura que se concentra principalmente nos elementos HTML, basicamente impedindo o padrão, mas, ao mesmo tempo, interrompe a propagação para aumentar.
Então, podemos simplesmente dizer, retornar false in
jQuery
é igual a:return false é e.preventDefault AND e.stopPropagation
Mas também não esqueça que tudo está nas funções relacionadas ao jQuery ou DOM, quando você o executa no elemento, basicamente impede que tudo seja acionado, incluindo o comportamento padrão e a propagação do evento.
Basicamente, antes de começar a usar
return false;
, primeiro entenda o que fazere.preventDefault();
ee.stopPropagation();
, se você acha que precisa dos dois ao mesmo tempo, basta usá-lo.Então, basicamente, este código abaixo:
é igual a este código:
fonte
Da minha experiência, event.stopPropagation () é usado principalmente em efeitos CSS ou em trabalhos de animação, por exemplo, quando você tem um efeito de passar o mouse para o cartão e o elemento do botão, quando passa o mouse sobre o botão, o efeito de passar o cartão e os botões será acionado nesse caso , você pode usar event.stopPropagation () para interromper as ações de bolhas e event.preventDefault () serve para impedir o comportamento padrão das ações do navegador. Por exemplo, você possui um formulário, mas definiu apenas o evento de clique para a ação de envio, se o usuário enviar o formulário pressionando enter, o navegador acionado pelo evento de pressionamento de tecla, e não o evento de clique aqui, você deverá usar event.preventDefault () para evitar inadequações comportamento. Não sei o que diabos é voltar falso; Para mais esclarecimentos, visite este link e brinque com a linha 33https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv
fonte