2017-10-13 95 views
2

我试图检测焦点事件是否由用户(手动)触发。 当谈到click事件,可以检查是否event.originalEvent存在内部处理方法:检测焦点事件是否由用户/浏览器或jQuery触发

typeof event.originalEvent != "undefined" 

不幸的是,它的行为对焦点事件不同。 请检查example

尝试单击第一个<input>,然后单击第二个输入的“触发点击”按钮,您将看到click undefined,这意味着event.originalEvent不存在。 然后尝试单击第一个<input>,然后单击第二个输入的“触发器焦点”按钮,您将看到focus objectevent.originalEvent这次出现。

  • 如何检测焦点事件是否由用户触发(不是编程)?
+0

这也许有所帮助:https://stackoverflow.com/questions/5653332/differentiate-between-焦点事件触发键盘鼠标 – Nayish

+0

您可以使用特殊事件吗?像'custom_blur'作为'blur'的别名? – Martijn

+1

在chrome下(未使用其他浏览器测试)从脚本触发时,“event.originalEvent.sourceCapabilities”为null。 –

回答

1

应用mousedown事件来检查它是否是用户操作或不:

$(document).ready(function() { 
 

 
    var isUserClick = false; 
 
    $("input").mousedown(function() { 
 
    isUserClick = true; 
 
    }); 
 
    $("input").on("click focus blur", function(event) { 
 
    console.log(event.type, typeof event.originalEvent, isUserClick ? 'user' : 'script'); 
 
    setTimeout(function() { 
 
     isUserClick = false; 
 
    }, 200); 
 
    }); 
 
    $("button").click(function() { 
 
    $("input." + $(this).attr("class")).trigger($(this).data("event")); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
FIRST: 
 
<input class="first" /> 
 
<button class="first" data-event="click">trigger click</button> 
 
<button class="first" data-event="focus">trigger focus</button> 
 
<button class="first" data-event="blur">trigger blur</button> 
 
<br> 
 
<br> SECOND: 
 
<input class="second" /> 
 
<button class="second" data-event="click">trigger click</button> 
 
<button class="second" data-event="focus">trigger focus</button> 
 
<button class="second" data-event="blur">trigger blur</button> 
 
<br>

+1

警告,它只捕获“点击”访问,它不考虑使用Tab键跳入现场。 –

相关问题