Javascript:检测事件是否由用户触发而不是以编程方式触发

时间:2015-04-22 12:45:08

标签: javascript javascript-events

以前问过这个问题但是在jQuery的上下文中。在 jQuery 中,我们可以通过事件对象(link)的 originalEvent属性来检查它,它会告诉它是手动还是已编程的事件

就我而言,我使用 Javascript事件监听器和触发器。在这种情况下,我们能否区分两种事件 (编程和手动)
如果没有那么任何变通方法?吗

我的听众:

   function setUpListeners(){
       _cellViewWrapper.addEventListener('mousedown',mouseDownHandler,false);
       _cellViewWrapper.addEventListener('mouseover',mouseEnter,false);
       _cellViewWrapper.addEventListener('blur',blurHandler,true);
       _cellViewWrapper.addEventListener('focus',focusEventHandler,true);
   }`

触发器使用案例: 1.)

if(!IE_FLAG) hidePicker();
               //if browser is internet explorer
               else{
                   //if blur is allowed then hide Picker
                   if(_ieBlurAllowed) hidePicker();
                   //if blur is not allowed -- keep focus on picker input
                  //triggering the focus event here
                   else blurredElement.focus(); /
             }

2。)if((inputElem !== _focussedInput)) setTimeout(function(){ inputElem.focus(); },10);

还有更多......

4 个答案:

答案 0 :(得分:11)

在最新的浏览器中, Event.isTrusted 可用于此特定用例。根据{{​​3}}:

  

Event接口的isTrusted只读属性是一个布尔值,当事件由用户操作生成时为true,当事件由脚本创建或修改或通过dispatchEvent调度时为false。

您可以简单地检查任何事件处理程序:

if (e.isTrusted) {
 /* The event is trusted. */
} else {
 /* The event is not trusted. */
}

浏览器支持:Chrome 46.0,Firefox(最新),Opera 33,Safari& IE(不支持)

答案 1 :(得分:5)

[解决方法] Javascript:检查是否event.screenX& event.screenY非零。

var button = document.getElementsByTagName('button')[0];

button.onclick = function(e) {
  if(e.screenX && e.screenX != 0 && e.screenY && e.screenY != 0){
         alert("real button click");
       }   
}

答案 2 :(得分:1)

我知道如何在jQuery中做到这一点

您可以通过选中e.isTrigger

来使用事件对象

Fiddle



$(".lol").click(function(e){
    console.log(e)
    alert("Is triggered: " + (e.isTrigger ? true:  false))
})

$(".trigger-lol").click(function(e){
    $(".lol").trigger("click")
})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="lol">lol</div>
<div class="trigger-lol">Trigger lol</div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这对我有用

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