bha*_*a_w 11 javascript dom-events
好吧,这个问题之前已经被问过,但是在jQuery的背景下.在jQuery中,我们可以通过事件Object(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);
}`
Run Code Online (Sandbox Code Playgroud)
触发器使用案例: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(); /
}
Run Code Online (Sandbox Code Playgroud)
2.) if((inputElem !== _focussedInput)) setTimeout(function(){ inputElem.focus(); },10);
还有很多...
小智 13
在最新的浏览器中,Event.isTrusted可用于此特定用例.根据其MDN文件:
Event接口的isTrusted只读属性是一个布尔值,当事件由用户操作生成时为true,当事件由脚本创建或修改或通过dispatchEvent调度时为false.
你可以简单地检查任何事件处理程序:
if (e.isTrusted) {
/* The event is trusted. */
} else {
/* The event is not trusted. */
}
Run Code Online (Sandbox Code Playgroud)
浏览器支持:Chrome 46.0,Firefox(最新),Opera 33,Safari和IE(不支持)
[解决方法] 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");
}
}
Run Code Online (Sandbox Code Playgroud)
我知道如何在 jQuery 中做到这一点
您可以通过检查来使用事件对象e.isTrigger
$(".lol").click(function(e){
console.log(e)
alert("Is triggered: " + (e.isTrigger ? true: false))
})
$(".trigger-lol").click(function(e){
$(".lol").trigger("click")
})
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)