FocusEvent如何弄清楚它是通过鼠标或标签触发的

时间:2016-04-05 08:49:18

标签: javascript jquery events

如果通过鼠标点击输入框外部触发了FocusEvent,或者已经标记出来,我有一些代码具有一些条件分支。这是一个非常混乱的JS-Legacy代码,我只有时间在这里应用修补程序。

Focus for EventEvent:https://developer.mozilla.org/en/docs/Web/API/FocusEvent

与Click事件不同,FocusEvent没有关于事件触发期间按下的按钮的任何信息。

有人知道如何获取这些信息吗?通过谷歌我只找到了解决方法 - 但我不能相信这个FocusEvent有办法接收开箱即用的按钮吗?

1 个答案:

答案 0 :(得分:1)

FocusEvent 在您链接的文档中被明确描述为实验技术。所以你可能会在将来添加你的要求。但是现在看起来你别无选择,只能使用解决方法。

我做了一个尝试:

var clickWhileFocused = false;

$("#testInput").on("tabbedOut", function () {
  console.log("tabbedOut");
});

$("#testInput").on("clickedOut", function () {
  console.log("clickedOut");
});

$(document).on("mousedown", function (e) {
  if($("#testInput").is(":focus") && e.target.id != "testInput") {
    $("#testInput").trigger("clickedOut");
    clickWhileFocused = true;
  }
});

$("#testInput").on("focusout", function () {
  if(!clickWhileFocused) {
    $("#testInput").trigger("tabbedOut");
  }
  
  clickWhileFocused = false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text"/>
<input id="testInput" type="text" placeholder="#testInput"/>
<input type="text"/>