2017-09-01 77 views
1

jsfiddle link觸發焦點事件將觸發blur事件(不使用的警報和瀏覽器控制檯)

<input id = "focus-ipt" type = "text" value = "nothing" />

var $focusIpt = document.querySelector("#focus-ipt"); 
$focusIpt.addEventListener("blur", function (e) { 
    $focusIpt.value = "blured!"; 
}); 
setTimeout(function() { 
    $focusIpt.focus(); 
    }, 1000); 

我只是觸發焦點事件,但焦點後的模糊觸發的事件; 我搜索了很長時間,關閉控制檯,使用setTimeout,但是,解決不了;我真的不知道這是怎麼發生的,任何人都可以幫助我?

+0

你確定沒有焦點事件監聽器嗎? –

回答

1

這實際上是而不是的情況; focus()不會自動觸發blur()

由於您正在與DOM進行交互,因此blur()正在觸發。通過點擊小提琴中的某個按鈕(如RunTidy),#focus-ipt元素不再處於活動狀態 - 您點擊的按鈕是。

如果您只是等待超時而不做任何事情,則不會發生blur()事件。只要你點擊輸入,blur()將發生

這可以看出,在下面的例子:

var $focusIpt = document.querySelector("#focus-ipt"); 
 
$focusIpt.addEventListener("blur", function(e) { 
 
    $focusIpt.value = "Blurred!"; 
 
}); 
 
setTimeout(function() { 
 
    $focusIpt.focus(); 
 
}, 1000);
<input id="focus-ipt" type="text" id="myText" value="Sample Text"> 
 
<button type="button">Click me to lose focus</button>

希望這有助於! :)

+0

我打開鏈接,沒有做任何事,並模糊解僱;我將代碼寫入html文件,通過chrome運行,沒有任何點擊,但blur事件仍然被解僱;請您複製代碼並運行?對不起,但這真讓我困惑了很多天。 –

+0

我運行你的代碼,只需點擊「運行代碼片段」按鈕,當按鈕的顏色從深變淺時,該值變爲「模糊!」 –

+0

'blur()'在打開JSFiddle鏈接時不會自動觸發。你確實在做一些讓blur()發生的事情。我的例子不會自動模糊,你的JSFiddle也不會。 –