我想在按键内触发模糊。 IE10与Chrome / FF的工作方式不同。似乎IE将在调用模糊处理程序之前完成keydown处理程序,而Chrome和FF将在模糊发生时立即触发模糊处理程序,然后返回完成按键处理程序。
我想知道这是不是一个错误,如果在IE中有一个很好的解决方法可以像Chrome和FF一样工作。
请参阅下面的代码。
$(document).ready(function () {
document.getElementById("txtInput").addEventListener('blur',
function (event) {
console.log('blur');
});
document.getElementById("txtInput").addEventListener('keydown',
function (event) {
console.log('down 1');
document.getElementById("txtInput").blur();
console.log('down 2');
}
);
});
Chrome的输出:
down 1
blur
down 2
IE的输出
down 1
down 2
blur
答案 0 :(得分:0)
试试这个:
$(document).ready(function () {
$("#txtInput").blur(function (event) {
event.preventDefault();
console.log('blur');
});
$("#txtInput").keypress(function (event) {
console.log('down 1');
$(this).blur();
console.log('down 2');
});
});
查看我在此更新的提琴手here中所做的更改。
我不得不改变你调用blur()触发器的方式,然后在blur()处理程序中添加一个简单的event.preventDefault()来防止在IE中再次触发。似乎IE在运行按键处理程序后试图将焦点从输入上移开。
同样通过使用这种表示法:($(“#txtInput”)[0])你实际上指的是原始元素对象而不是jQuery对象,这可能导致IE中的问题,其他两个正在捕获错误。
希望这会有所帮助!
答案 1 :(得分:0)
我找到了几个解决方案。首先是使用焦点而不是模糊。模糊不泡,焦点确实。不确定为什么重要,但事件可能以不同的方式实施。不幸的是,这对我来说不是一个选择。
另一个解决方案是拥有两个keydown处理程序。第一个触发模糊以及我想在模糊之前发生的任何事情。第二个处理程序在模糊之后进行处理,但是我必须设置50ms的超时,因为所有的keydown处理都发生在模糊处理之前。