以编程方式取消焦点?

40

我有一个使用jquery ui dialog加载动态/JSON内容的选项卡。由于复杂性,我无法发布fiddle或相关代码(代码太多)。

打开对话框后,您可以通过对话框中的元素进行制表符切换,直到第一个选项卡。之后,您无法通过切换到其他地方来使用制表符。聚焦锁定在该选项卡上,即使单击其他位置,也会锁定在该选项卡上。

我无法找到此问题的实际原因。

那么,我该如何以编程方式删除焦点?


你使用的是哪个浏览器?在IE中,有时会无缘无故地失去焦点。 - Hossein
TAB键的keypress事件是否被覆盖以手动管理焦点切换(例如在显示模态对话框时)? - Shawn Chin
我唯一看到键盘按下事件的地方是为了让 keydown 函数能够将光标移动到选项卡内容中。而且这适用于所有浏览器。 - Jason
3个回答

60

1
这是正确的答案,不过我没有清晰地表达/解释我的情况。我会相应地进行更新。谢谢。 - Jason
3
这个方法很棒,解决了我之前遇到的一个类似的问题。如果你正在使用jQuery并且需要将其通用地应用于一组事件,我建议您快速更改一下,可以像这样做:$(document.activeElement).blur() - 在事件发生时,无论什么处于活动状态的元素都会失去焦点。 - Markus
3
如何使用纯JavaScript实现? - AmerllicA
1
您可以使用纯JavaScript的blur()和focus():https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLOrForeignElement/blur - Laurel Thomson

3
尝试在你想要失去焦点的字段上触发一个“blur”事件。

0
我会添加一些警报来找出JS失败的位置。例如:
alert(1);
var a = 10;
alert(2);
var b = null;
alert(3);
a += 5;
alert(4);
b.hello();
alert(5);

显然,在这个例子中,最后一个警报将是4。

虽然这不是一个好的方法,但每个人都必须在某个时刻这样做。


9
警报并不是一种适当的调试方式,特别是如果它对鼠标移动、悬停或类似事件作出反应。现在几乎所有的浏览器都有一个调试控制台,您可以使用 console.log(...); 将信息输出到其中。 - ThiefMaster
6
正确的调试方式是有助于您以最有效的方式跟踪错误。警报在调试中具有非常有用的作用,因为它们会暂停执行。就在昨天,我正在调试一个有问题的 jQuery 动画,而 console.log() 对于定位这个视觉故障毫无用处,因为它发生得太快了。加入警报在每个步骤上暂停动画,使我能够准确找到故障发生的位置。你说得对,楼主的方法不是正确的方式,在那种情况下 console.log() 更好,但是 alert() 在调试中也有一席之地。 - Gavin
2
@Gavin 和其他人,最好使用 debugger 命令(至少在支持它的浏览器中)。它会暂停执行,但仍然可以使用开发者工具来检查正在发生的事情。使用 alert,你只能得到当前状态的视觉快照,这并不总是有帮助的。 - stafffan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接