【问题标题】:Find if a textbox is currently selected查找当前是否选择了文本框
【发布时间】:2011-06-02 07:04:24
【问题描述】:

如果文本框(或文本区域)当前处于焦点位置,我如何找到?我不在乎知道它是哪一个,我只需要知道一个是否在焦点上(其中有光标)。我将如何使用 javascript 和 jquery 做到这一点?

【问题讨论】:

    标签: javascript jquery textbox focus


    【解决方案1】:

    既然你找到了document.activeElement,你可以查看它的nodeName。

    if (document.activeElement.nodeName == 'TEXTAREA' || document.activeElement.nodeName == 'INPUT') {
        // ....
    }
    

    类似的东西。

    【讨论】:

    • 谢谢,但是如何从 document.activeElement 获取 jQuery 对象?
    • 这不会检查可编辑的 HTMLDivElements。请参阅下面的答案。
    【解决方案2】:

    好的,刚刚想通了。这是我所做的:

    function checkFocus() {
    
      if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") {
    
      //Something's selected
    
      return true;
    
     }
    
    }
    

    【讨论】:

    • 有人将此标记为答案,它说我必须等待 2 天。 :)
    • 你是唯一一个可以将此标记为答案的人。另外,请查看Stack Overflow Markdown help-page,获取有关如何格式化您的答案的指导,尤其是代码示例。
    • 请注意,这适用于所有现代浏览器,但它适用于许多过时的浏览器。请查看this answer 了解克服此问题的技术。
    【解决方案3】:
    $('#yourTextAreaID:focus'); 
    

    行不通。 :) 但是

    $('#yourTextAreaID').focus(function(){
        // do something
    });
    

    当元素获得焦点时会执行//do something 代码。

    【讨论】:

    • 好的,但是在任何给定时间(不一定是当用户单击文本框时)我将如何检查任何文本框是否有焦点?
    • 鉴于 OP 不在乎“它是哪一个”,我建议将选择器修改为:$('textarea:focus, input:text:focus')...
    • 我刚刚找到了 document.activeElement。我如何检查那是文本框还是文本区域?
    • @David 谢谢,这样更干净了。
    • 我不认识:focus 伪选择器,API 或快速测试也不认识...
    【解决方案4】:

    通过检查可编辑的 HTMLDivElements 来扩展接受的答案:

    if (document.activeElement.nodeName == 'TEXTAREA'
        || document.activeElement.nodeName == 'INPUT'
        || (document.activeElement.nodeName == 'DIV'
            && document.activeElement.isContentEditable)) {
        // …
    }
    

    【讨论】:

      【解决方案5】:
      $('#target').focus(function() {
        alert('Handler for .focus() called.');
      });
      

      也可以试试:

      alert($("*:focus").attr("id"));
      

      http://jsfiddle.net/4KVvV/

      【讨论】:

      • 正如@lonesome 上面指出的, :hover 不是真正的jquery 选择器。我也认为是,但是当我检查文档时,我找不到它。
      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2013-03-04
      相关资源
      最近更新 更多