每当从任何输入元素触发模糊事件时,我都想将焦点设置为一个特定的元素。
当我尝试专注于触发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();
});