以编程方式移除焦点?
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?