检查文本框是否被选中

8

如何判断文本框(或文本区域)当前是否聚焦?我不需要知道是哪个,只需要知道是否有一个正在聚焦(光标在其中)。我该如何使用JavaScript和jQuery实现此操作?


问题标题有误导性。焦点并不意味着文本被选中。 - Siyon DP
5个回答

22

既然您已经找到了 document.activeElement,那么您可以检查它的 nodeName。

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

类似这样的东西。


谢谢,但我如何从document.activeElement获取jQuery对象? - Leticia Meyer
这不会检查可编辑的HTMLDivElements。请参见下面的答案。 - Lenar Hoyt

8

好的,我明白了。这是我做的:

function checkFocus() {

  if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") {

  //Something's selected

  return true;

 }

}

有人把这个标记为答案,它说我必须等待2天。 :) - Leticia Meyer
2
你是唯一能够将其标记为答案的人。此外,请查看Stack Overflow Markdown帮助页面,以获取有关如何格式化您的答案(特别是代码示例)的指导。 - David Thomas
注意:这将适用于所有现代浏览器,但不会在许多过时的浏览器上工作。请查看此答案以获取一种克服此问题的技术。 - lonesomeday

3

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

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

2
$('#yourTextAreaID:focus'); 

不会起作用。:) 但是
$('#yourTextAreaID').focus(function(){
    // do something
});

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


好的,但是在任何时候(不一定是用户单击文本框时),我该如何检查是否有任何文本框具有焦点? - Leticia Meyer
鉴于 OP 不关心“哪一个”,我建议修改选择器为:$('textarea:focus, input:text:focus')... - David Thomas
我刚刚发现了document.activeElement。我该如何检查它是文本框还是文本域? - Leticia Meyer
@David 谢谢,这样更简洁。 - JakeParis
1
我不认识 :focus 伪选择器,API 或快速测试也不认识... - lonesomeday
@lonesomeday,很有趣的发现:由于它在CSS下工作,我从未想过要质疑它是否在jQuery下工作。 - David Thomas

1
$('#target').focus(function() {
  alert('Handler for .focus() called.');
});

也可以尝试:

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

http://jsfiddle.net/4KVvV/


正如 @lonesome 在上面指出的那样,:hover 不是真正的 jQuery 选择器。我也曾经这么认为,但当我查看文档时,发现它并未被提及。 - JakeParis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接