【问题标题】:Change focus between web inputs在 Web 输入之间更改焦点
【发布时间】:2015-05-28 07:58:32
【问题描述】:

在 JavaScript/jQuery 网络环境中,具有:

  • 两个表单文本输入字段 A 和 B 已启用
  • 如果输入字段都没有焦点,则应禁用输入字段

即通过jQuery的focusout函数来检查A和B何时失去焦点工作正常,但是当A失去焦点到B(选项卡或通过选择B)时,我无法检查B是否获得焦点,因为A的焦点在焦点之前更改完成。

在输入字段之间切换时,如何通过 focusout 或等于检查 A 和 B 都失去焦点?

例子:

当两者都失去焦点时禁用输入字段,但不幸的是在它们之间切换时也禁用 - 这不是本意。

$('input').focusout(function() {
    if ($(':focus').length === 0) { // does not count the other input yet
        $("input").prop('disabled', true);
    }
});

https://jsfiddle.net/hbypowv4/

【问题讨论】:

  • 向我们展示一些您目前拥有的代码
  • 如果它们都是disabled,你怎么能在input 字段之一上focus;还是我忽略了一些要求?
  • 其中一个加载了自动对焦
  • 您不能专注于禁用的字段,因此该元素上没有 onFocus 事件...
  • 默认不禁用输入字段

标签: javascript jquery focusout jquery-focusout


【解决方案1】:

你可以使用MouseEvent.relatedTarget来检查A是否失去焦点给B

MouseEvent.relatedTarget 只读属性是次要的 事件的目标,如果有的话

https://jsfiddle.net/hbypowv4/2/

【讨论】:

【解决方案2】:

你可以像这样使用 window.setTimeout() 来做到这一点:

$(document).ready(function() {
  $('input').focusout(function() {
    window.setTimeout(function() {
        if ($(':focus').length === 0) {
            $("input").prop('disabled', true);
        }
    }, 5);
  });    
});

【讨论】:

  • 这受制于竞争条件。
  • @kaarel 是的,我知道。但我认为这是一个 hack,因为我不知道 5 毫秒后是否一切都准备好了。但是这可能是我最终的结果。
猜你喜欢
  • 2021-01-31
  • 2021-02-20
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 2013-01-02
相关资源
最近更新 更多