为什么自我关注在 JavaScript 中不起作用



每当从任何输入元素触发模糊事件时,我都想将焦点设置为一个特定的元素。

当我尝试专注于触发blur事件的同一元素时,会出现此问题。

为什么这只有在我试图关注的元素不是触发事件的元素时才有效?

[问题说明] 并按照小提琴进行解释:

  • 我试图关注的元素是col0
  • 除非触发模糊事件的元素不是col0否则它可以完美地工作
  • 但是,当模糊从col0本身触发时,$("#col0").focus()不起作用。

问:为什么?&解决方法/解决方案是什么?

PS:我只是想了解行为的原因和克服它的方法。对可用性的担忧不是问题

在FF中对我来说是有效的...

$('input').on('blur', function() {
    setTimeout(function () { $("#col0").focus(); }, 0);
});

这只是稍微推迟一个UI动作(在处理模糊事件完成后(。

警告:在jsfiddle中,FF不会让你在尝试后编辑代码,一旦你进入输入,你就会被卡在那里,直到刷新

更新:解释很棘手,因为它是FF中的实现问题(因为Chrome和IE的行为符合您的预期(,我的猜测是FF防止在相同元素的事件处理程序中触发相关事件(可能导致无限循环的事情(,使用setTimeout,您在离开处理程序后不久就会触发事件(甚至UI也有机会重新绘制自己(

看起来您正在尝试将注意力集中在除控件之外的所有内容上。 试试这个:

$('input:not(#idofcontrol)').blur(function() {
    $('#idofcontrol').focus();
});

最新更新