2015-04-22 106 views
6

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

在我的情况下,我是使用Javascript事件监听器和触发器。我们可以区分这两种事件(编程和手动)在这种情况下?

如果不是那么任何解决方法??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);

还有更多...

+0

jQuery是只是JavaScript。如果在jQuery中你可以做到这一点,你可以在js中完成。 – rottenoats

+0

嗯....任何想法他们如何在jQuery中做到这一点? –

+0

以编程方式触发事件的代码是什么? – Scimonster

回答

2

我知道如何在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>

+0

感谢您的答复。就像我在我的问题中所讲的,我正在使用纯Js事件和触发器。如果我一直在使用jQuery,我不会发布这个问题。 –

+0

@bhavya_w这个答案可以帮助那些可能有同样问题的人,但可以使用jQuery。 – reformed

3

使用事件对象[解决方案]的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"); 
     } 
} 
+0

嗯...让我试试吧。同时请你解释我是如何工作的? –

+0

当用户点击按钮时,基于按钮位置将会有一些真实的screenX和screenY。但是,当你从代码中完成它 - 它将是零。 – Vijay

+0

@Vijay在我试过的所有解决方案中,'e.isTrusted'或'e.originalEvent'或'e.which',当我们点击像$(“#button”)[0] .click ();'你的是唯一的解决方案,适用于所有场景和点击组合。但不幸的是,它不适用于键盘点击。但无论如何+1是一个干净和简单的解决方案。 – Anurag

7

在最新的浏览器,Event.isTrusted适用于这一特定用例。按照其MDN document

的isTrusted只读事件接口的属性是一个布尔值时,由用户操作生成的事件是真实的,虚假的情况下创建或通过脚本修改时,或通过dispatchEvent派发。

你可以简单地检查任何事件处理中:

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

浏览器支持:铬46.0,火狐(最新的),歌剧33,Safari浏览器& IE(不支持)

相关问题