以编程方式移除焦点?

Posted

技术标签:

【中文标题】以编程方式移除焦点?【英文标题】:Remove focus programmatically? 【发布时间】:2011-12-18 17:54:13 【问题描述】:

我有一个 jquery ui 对话框,其中包含动态加载的选项卡/带有内容的 JSON。由于复杂性,我无法真正发布小提琴或相关代码(代码太多)。

发生的情况是,当对话框打开时,您可以在对话框中的元素之间切换,直到第一个选项卡。之后,您将无法通过标签转到其他任何地方。焦点锁定在该选项卡上,即使您单击其他位置,焦点也会锁定在该选项卡上。

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

那么,如何

【问题讨论】:

你用的是什么浏览器?在 IE 中,您有时会无缘无故失去焦点。 是否已覆盖 TAB 的按键事件以手动管理焦点切换(就像显示模式对话框时可能会做的那样)? 我看到 keypress 事件的唯一地方是 keydown 函数能够将向下箭头击到选项卡的内容中。它适用于所有浏览器。 【参考方案1】:

尝试在您想要失去焦点的字段上触发blur 事件。

【讨论】:

【参考方案2】:

这可能会有所帮助...

http://api.jquery.com/blur/

$('#tabName').blur();

【讨论】:

这是正确的答案,但是我没有清楚地说明/解释我的情况。我会相应地更新。谢谢。 这很好,解决了我遇到的类似问题。我推荐一个快速更改,如果您使用 jQuery 并且需要将其普遍应用于事件范围,您可以执行以下操作:$(document.activeElement).blur() - 任何活动都会在事件发生时失去焦点。跨度> javascript怎么做? 您可以将 blur() 和 focus() 与纯 javascript 一起使用:developer.mozilla.org/en-US/docs/Web/API/htmlOrForeignElement/…【参考方案3】:

我会发出大量警报来查找 JS 失败的地方。例如

alert(1);
var a = 10;
alert(2);
var b = null;
alert(3);
a += 5;
alert(4);
b.hello();
alert(5);

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

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

【讨论】:

Alert 不是正确的调试方法,尤其是当它对 mousemove、hover 或类似事件做出反应时。现在几乎所有浏览器都有一个调试控制台,您可以使用console.log(...); 写入它 正确的调试方法是帮助您以最有效的方式追踪错误。警报在调试中具有非常有用的作用,因为它们会暂停执行。就在昨天,我正在调试一个有故障的 jQuery 动画,console.log() 无法确定这个视觉故障的来源,因为它发生得太快了。添加警报会在每个步骤中暂停动画,让我能够准确找到故障的来源。你说得对,OPs 方法不是正确的方法,console.log() 在这种情况下更好,但alert() 在调试中占有一席之地。 @Gavin 然后休息。最好使用debugger 命令(至少在支持它的浏览器中)。它会暂停执行,但仍允许您使用开发人员工具检查正在发生的事情。使用警报,您得到的只是当前状态的可视化快照,但这并不总是有帮助。

以上是关于以编程方式移除焦点?的主要内容,如果未能解决你的问题,请参考以下文章

Android TextField:以编程方式设置焦点+软输入

您如何以编程方式将焦点设置到已具有焦点的 WPF ListBox 中的 SelectedItem?

Horizo​​ntalScrollView 以编程方式滚动而没有焦点

Eclipse - 以编程方式打开编辑器会导致焦点问题

在UITextfield中输入文本后以编程方式更改焦点

按下时以编程方式移除 UIBarButtonItem 上的灯光?