【问题标题】:Javascript/jQuery detect if input is focused [duplicate]Javascript / jQuery检测输入是否集中[重复]
【发布时间】:2025-11-27 17:55:02
【问题描述】:

如果 textarea 已经聚焦,我如何检测 .click 事件何时触发?

我有这个 jquery:

$(".status").on("click","textarea",function(){
        if ($(this) == "focused") {
            // fire this step
        }else{
            $(this).focus();
            // fire this step
    }

【问题讨论】:

  • 它不是重复的,因为另一个问题专门要求 jquery 解决方案。
  • 我同意。我想知道 OP 是否曾经是基于 jQuery 的...
  • @HermannIngjaldsson 隐含地这样做了,因为提供的代码使用了 jQuery(就像最初发布时一样)。因此它重复的。

标签: javascript jquery


【解决方案1】:

使用纯javascript:

this === document.activeElement // where 'this' is a dom object

或者使用 jquery 的 :focus 伪选择器。

$(this).is(':focus');

【讨论】:

  • 我不知道为什么它不起作用..它们都没有..如果它没有集中注意力,它会触发第一步..但它应该触发 else 步骤..
  • 请注意,如果节点未附加到 dom 或隐藏(例如 display:none;),则使用 'focus()' 设置焦点将不起作用(例如 display:none;)
  • 感谢您没有提供 jQuery 解决方案。特别是因为纯 JS 解决方案也短得多。 提示帽子
  • @Mathias - 你可能指的是“更短”的一些模糊定义......
  • @katzenhut ha,是的......不知道我想说什么(早在 2014 年)。我想我的意思是“更短”,不调用一堆库代码?!
【解决方案2】:

如果你可以使用 JQuery,那么使用 JQuery :focus selector 就可以了

$(this).is(':focus');

【讨论】:

    【解决方案3】:

    使用 jQuery 的.is( ":focus" )

    $(".status").on("click","textarea",function(){
            if ($(this).is( ":focus" )) {
                // fire this step
            }else{
                        $(this).focus();
                // fire this step
        }
    

    【讨论】:

      【解决方案4】:

      你试过了吗:

      $(this).is(':focus');
      

      看看Using jQuery to test if an input has focus 它提供了更多示例

      【讨论】: