检查事件是否由人触发

2020/11/17 12:41 · javascript ·  · 0评论

我有一个附加到事件的处理程序,并且我希望它仅在由人触发而不是由trigger()方法触发时执行。我该如何区分?

例如,

$('.checkbox').change(function(e){
  if (e.isHuman())
  {
    alert ('human');
  }
});

$('.checkbox').trigger('change'); //doesn't alert

您可以检查e.originalEvent:如果已定义,则点击是人为的:

看看小提琴http://jsfiddle.net/Uf8Wv/

$('.checkbox').change(function(e){
  if (e.originalEvent !== undefined)
  {
    alert ('human');
  }
});

我在小提琴中的例子:

<input type='checkbox' id='try' >try
<button id='click'>Click</button>

$("#try").click(function(event) {
    if (event.originalEvent === undefined) {
        alert('not human')
    } else {
        alert(' human');
    }


});

$('#click').click(function(event) {
    $("#try").click();
});

比上面更直接的是:

$('.checkbox').change(function(e){
  if (e.isTrigger)
  {
    alert ('not a human');
  }
});

$('.checkbox').trigger('change'); //doesn't alert

我认为这样做的唯一方法trigger是根据文档调用中传递一个附加参数

$('.checkbox').change(function(e, isTriggered){
  if (!isTriggered)
  {
    alert ('human');
  }
});

$('.checkbox').trigger('change', [true]); //doesn't alert

示例:http//jsfiddle.net/wG2KY/

接受的答案对我不起作用。已经6年了,自那时以来jQuery发生了很大变化。

例如,event.originalEvent始终true使用jQuery 1.9.x返回。我的意思是对象总是存在,但内容却不同。

那些使用较新版本的jQuery的人可以尝试这一版本。适用于Chrome,Edge,IE,Opera,FF

if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) {
    //Hey hooman it is you
}

当前大多数浏览器都支持event.isTrusted

if (e.isTrusted) {
  /* The event is trusted: event was generated by a user action */
} else {
  /* The event is not trusted */
}

文档

所述isTrusted只读的属性Event接口是一个Boolean
时由用户操作生成的事件,并且虚假
事件创建或修改在由脚本或者经由调度
EventTarget.dispatchEvent()

柜面你有你的所有代码,没有外来的呼叫控制$(input).focus()setFocus()

对我来说,使用全局变量是正确的方法。

var globalIsHuman = true;

$('input').on('focus', function (){
    if(globalIsHuman){
        console.log('hello human, come and give me a hug');
    }else{
        console.log('alien, get away, i hate you..');
    }
    globalIsHuman = true;
});

// alien set focus
function setFocus(){
    globalIsHuman = false;
    $('input').focus();
}
// human use mouse, finger, foot... whatever to touch the input

如果某个外星人仍然想$(input).focus()从另一个星球打电话祝你好运或查看其他答案

您可以使用onmousedown来检测鼠标单击与Trigger()调用。

我考虑一下您检查鼠标位置的可能性,例如:

  • 请点击
  • 获取鼠标位置
  • 重叠按钮的坐标
  • ...
本文地址:http://javascript.askforanswer.com/jianchashijianshifouyourenchufa.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!