Eu tenho um manipulador anexado a um evento e gostaria que ele fosse executado apenas se for acionado por um humano, e não por um método trigger (). Como eu digo a diferença?
Por exemplo,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
javascript
jquery
Dziamid
fonte
fonte
:)
event.isTrigger
originalEvent
quando o evento é acionadoDOM.click()
, mas você pode usar$($("#try")[0]).click();
, o que é desajeitado, mas funciona.Mais direto do que acima seria:
fonte
isTrigger
para a API pública a partir desse momento .Eu acho que a única maneira de fazer isso seria passar um parâmetro adicional na
trigger
chamada conforme a documentação .Exemplo: http://jsfiddle.net/wG2KY/
fonte
A resposta aceita não funcionou para mim. Faz 6 anos e o jQuery mudou muito desde então.
Por exemplo,
event.originalEvent
retorna sempretrue
com o jQuery 1.9.x. Quero dizer, o objeto sempre existe, mas o conteúdo é diferente.Quem usa versões mais recentes do jQuery pode tentar este. Funciona no Chrome, Edge, IE, Opera, FF
fonte
Atualmente, a maioria dos navegadores oferece suporte a event.isTrusted :
Dos documentos :
fonte
Você pode usar onmousedown para detectar o clique do mouse vs a chamada trigger ().
fonte
Eu pensaria em uma possibilidade em que você verifica a posição do mouse, como:
fonte
Incase você tem o controle de todo o seu código, não chamadas de alienígenas
$(input).focus()
do quesetFocus()
.Usar uma variável global é uma maneira correta para mim.
Se algum alienígena ainda quiser ligar
$(input).focus()
de outro planeta. Boa sorte ou verifique outras respostasfonte
setFocus()
- não impede que as pessoas acionem o evento de foco. Não escreversetFocus()
também impediria as pessoas de chamá-lo, então não vejo o benefício. De fato, as pessoas ainda podem ligar$('input').focus()
e passar.(function(){/*your code here*/})();
Isso impediria a função setFocus de ser chamada e o booleano de ser alterado por scripts externos.