使用 JavaScript 或 jQuery 检测哪个表单输入具有焦点

IT技术 javascript jquery focus forms
2021-03-19 11:48:25

您如何使用 JavaScript 或 jQuery 检测哪个表单输入具有焦点?

在函数中,我希望能够确定哪个表单输入具有焦点。我希望能够在直接的 JavaScript 和/或 jQuery 中做到这一点。

6个回答

document.activeElement,它在 IE 中得到了很长时间的支持,最新版本的 FF 和 chrome 也支持它。如果没有焦点,则返回document.body对象。

我不确定这是否是最有效的方法,但您可以尝试:

var selectedInput = null;
$(function() {
    $('input, textarea, select').focus(function() {
        selectedInput = this;
    }).blur(function(){
        selectedInput = null;
    });
});
同意。可能是一种非常低效的做事方式,但如果您只想知道最后一个带焦点的文本框/文本区域/下拉菜单并且不关心按钮等内容,则很难找到更好的解决方案。
2021-04-22 11:48:25
@Juan Mendes:并非所有事情都必须是针对每种情况的全面解决方案。信不信由你,大多数时候你将有 < 10 个输入并且没有动态添加的字段,这将工作得很好。
2021-05-01 11:48:25
@混乱。你的意思是很难找到更好的解决方案?只需检查 的值document.activeElement看我的回答
2021-05-02 11:48:25
大多数情况下,少于 10 个输入并且不动态添加它们?也许对于简单的表单,而不是复杂的 Web 应用程序。如果 document.activeElement 在所有 A 级浏览器中都可用,为什么要使用更复杂且技术上更差的解决方案?此外,如果焦点转到链接,这会给你一个误报。我只是警告OP。
2021-05-03 11:48:25
对于大型 DOM 结构非常不友好,不支持动态添加元素,链接呢?。很惊讶这被选为正确答案
2021-05-08 11:48:25

如果您只想在获得焦点时更改特定表单字段的 CSS,您可以使用 CSS ":focus" 选择器。为了与不支持此功能的 IE6 兼容,您可以使用IE7库。

我说的是 CSS 选择器,而不是 jQuery 选择器。
2021-05-03 11:48:25
$('#some_id_here input[type=text]:focus') 将适用于文本输入。
2021-05-08 11:48:25
这对我来说根本不起作用 - 有新的“:focus”选择器吗?
2021-05-11 11:48:25

否则,您可以使用 onfocus 和 onblur 事件。

就像是:

<input type="text" onfocus="txtfocus=1" onblur="txtfocus=0" />

然后在你的javascript中有这样的东西

if (txtfocus==1)
{
//Whatever code you want to run
}

if (txtfocus==0)
{
//Something else here
}

但这只是我的做法,如果你有,比如 10 个输入,它可能不是非常实用:)

我会这样做:我使用了一个函数,如果它发送的元素的 ID 是一个会触发我的事件的元素,它将返回一个 1,而所有其他元素将返回一个 0,然后“if”语句将只是失败并且不做任何事情:

function getSender(field) {
    switch (field.id) {
        case "someID":
        case "someOtherID":
            return 1;
        break;
        default:
            return 0;
    }
}

function doSomething(elem) {
    if (getSender(elem) == 1) {
       // do your stuff
    }
  /*  else {
       // do something else
    }  */
}

HTML 标记:

<input id="someID" onfocus="doSomething(this)" />
<input id="someOtherID" onfocus="doSomething(this)" />
<input id="someOtherGodForsakenID" onfocus="doSomething(this)" />

前两个将在 doSomething 中执行事件,最后一个不会(或者如果未注释将执行 else 子句)。

-汤姆