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

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

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

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

那么,如何以编程方式移除焦点?

【问题讨论】:

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

标签: javascript jquery focus bind


【解决方案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 命令(至少在支持它的浏览器中)。它会暂停执行,但仍允许您使用开发人员工具检查正在发生的事情。使用警报,您得到的只是当前状态的可视化快照,但这并不总是有帮助。
    猜你喜欢
    • 2011-02-24
    • 2019-12-07
    • 2013-10-09
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2010-11-02
    • 2015-03-12
    • 2017-08-26
    相关资源
    最近更新 更多