【问题标题】:Maintain focus on an input tag保持对输入标签的关注
【发布时间】:2013-03-27 21:56:13
【问题描述】:

我正在尝试使用以下代码将注意力集中在输入元素上:

<input onblur="this.focus()" />

但它似乎不起作用。

【问题讨论】:

  • “它似乎不起作用”是对问题的相当糟糕的描述。您能否更详细地描述不起作用的方面?还介意解释为什么你想保持专注吗?这没什么意义,因为您将无法做任何事情
  • 抱歉,我的意思是我希望文本光标始终存在。有没有办法在光标不消失的情况下单击其他内容?
  • 有什么目的?您将无法单击其他任何位置,因为焦点将返回到控件。

标签: javascript html input dom-events


【解决方案1】:

如果我们只是在blur事件上调用.focus(),它会恢复焦点,但实际上不会有文本光标。为了处理这个问题,我们必须让元素失去焦点,然后在几毫秒内返回它。我们可以为此使用setTimeout()

$('#inp').on('blur',function () { 
    var blurEl = $(this); 
    setTimeout(function() {
        blurEl.focus()
    }, 10);
});

这里是working example。小心 - 输入后不能离开文本字段 =)

EDIT我用的是jQuery,不过不用它也能轻松搞定。
EDIT2这里是纯JS版fiddle

<input type="text" id="elemID" />

<script type="text/javascript">
    document.getElementById('elemID').onblur = function (event) { 
        var blurEl = this; 
        setTimeout(function() {
            blurEl.focus()
        }, 10);
    };
</script>

【讨论】:

  • 谢谢,但我还需要能够点击其他内容。有可能吗?
  • 是的,有可能。您唯一需要记住的是,在任何点击后,它都会返回对输入的关注。也许您应该编写一些额外的条件来控制焦点丢失预防。
  • 你会如何在纯 Javascript 中做到这一点?我根本没有 jQuery 经验。
  • 最后一件事:它可以这样工作吗? &lt;input onblur="setTimeout(this.focus(),10" /&gt;
  • @in3D =) 差不多。您忘记将元素引用保存到全局变量。应该是这样的 &lt;input type="text" id="inp" onblur="var blurEl = this; setTimeout(function() {blurEl.focus()},10)" /&gt; 投票给你最短的代码,但请记住,使用内联 JS 是一个坏习惯。
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2021-02-17
  • 2017-04-28
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
相关资源
最近更新 更多