J'ai un gestionnaire attaché à un événement et je voudrais qu'il s'exécute uniquement s'il est déclenché par un humain, et non par une méthode trigger (). Comment faire la différence?
Par exemple,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
javascript
jquery
Dziamid
la source
la source
:)
event.isTrigger
originalEvent
lorsque l'événement est déclenché parDOM.click()
, mais vous pouvez l'utiliser$($("#try")[0]).click();
, ce qui est maladroit, mais fonctionne.Plus simple que ci-dessus serait:
la source
isTrigger
à l'API publique à partir de ce moment .Je pense que le seul moyen de le faire serait de passer un paramètre supplémentaire sur l'
trigger
appel selon la documentation .Exemple: http://jsfiddle.net/wG2KY/
la source
La réponse acceptée n'a pas fonctionné pour moi. Cela fait 6 ans et jQuery a beaucoup changé depuis.
Par exemple,
event.originalEvent
renvoie toujourstrue
avec jQuery 1.9.x. Je veux dire que l'objet existe toujours mais le contenu est différent.Ceux qui utilisent des versions plus récentes de jQuery peuvent essayer celui-ci. Fonctionne sur Chrome, Edge, IE, Opera, FF
la source
Actuellement, la plupart des navigateurs prennent en charge l' événement .
À partir de la documentation :
la source
Vous pouvez utiliser onmousedown pour détecter un clic de souris ou un appel trigger ().
la source
Je penserais à une possibilité où vous vérifiez la position de la souris, comme:
la source
Incase vous avez le contrôle de tout votre code, pas d'appels extraterrestres
$(input).focus()
quesetFocus()
.Utiliser une variable globale est un moyen correct pour moi.
Si un extraterrestre veut toujours appeler
$(input).focus()
d'une autre planète. Bonne chance ou vérifiez d'autres réponsesla source
setFocus()
- cela n'empêche pas les gens de déclencher l'événement de focus. Ne pas écriresetFocus()
du tout empêcherait également les gens de l'appeler, donc je ne vois pas l'avantage. En fait, les gens pouvaient toujours appeler$('input').focus()
et faire passer.(function(){/*your code here*/})();
cela éviterait que la fonction setFocus ne soit appelée et que le booléen ne soit modifié par des scripts extérieurs.