0

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

当我试图关注触发blur事件的同一元素时,就会出现此问题。

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

[问题说明] 和按照小提琴的解释:

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

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

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

4

2 回答 2

0

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

$('input:not(#idofcontrol)').blur(function() {
    $('#idofcontrol').focus();
});
于 2012-11-07T18:45:53.410 回答
0

这对我来说在FF中有效......

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

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

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

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

于 2012-05-04T07:01:10.063 回答