是'模糊'并且'关注'保证按顺序发生的事件?

时间:2017-04-18 14:42:31

标签: javascript

假设您按Tab键将焦点从元素A移动到B.这应触发以下内容:

    元素A
  1. blur
  2. 元素B上的
  3. focus
  4. 假设他们按照那个顺序开火是否安全?

2 个答案:

答案 0 :(得分:2)

blur

  

当事件目标失去焦点时,用户代理必须调度此事件。在发送此事件类型之前,必须从元素中获取焦点。

focus

  

当事件目标获得焦点时,用户代理必须调度此事件。在发送此事件类型之前,必须将焦点放在元素上。

由于没有两个元素可以同时具有焦点,因此blur必须在focus之前出现。

答案 1 :(得分:0)

运行以下代码段并将输入对焦在左侧,然后点击右侧的输入,您会看到顺序是模糊的 - >焦点 - >焦点,(在Chrome中),但是如果你在Safari中检查它,它将会模糊 - >焦点 - >焦点。所以现在,您不能假设不同的用户代理实现相同的事件顺序。此外,焦点和模糊基本上是一回事。不同的是,模糊事件不会冒泡。

编辑:为了响应你的编辑,在焦点之前总是会出现模糊。



var i1 = document.getElementById("i1");
var i2 = document.getElementById("i2");
var whatHappened = document.getElementById("whatHappened");

i1.addEventListener("focusout", function() {
    var p = document.createElement("P");
    p.innerText = "focusout";
    whatHappened.appendChild(p); 
});

i1.addEventListener("blur", function() {
    var p = document.createElement("P");
    p.innerText = "blur";
    whatHappened.appendChild(p); 
});

i2.addEventListener("focus", function() {
    var p = document.createElement("P");
    p.innerText = "focus";
    whatHappened.appendChild(p); 
});

<input type="text" id="i1" />
<input type="text" id="i2" />
<div id="whatHappened"></div>
&#13;
&#13;
&#13;