如何使用jQuery获取焦点元素?

时间:2012-06-30 21:55:22

标签: javascript jquery cursor element caret

使用jQuery,我如何获得具有插入符号(光标)焦点的输入元素?

或者换句话说,如何确定输入是否具有插入符号?

8 个答案:

答案 0 :(得分:687)

// Get the focused element:
var $focused = $(':focus');

// No jQuery:
var focused = document.activeElement;

// Does the element have focus:
var hasFocus = $('foo').is(':focus');

// No jQuery:
elem === elem.ownerDocument.activeElement;

你应该使用哪一个?引用jQuery docs

  

与其他伪类选择器(以“:”开头的那些)一样,建议先于:使用标记名称或其他选择器进行聚焦;否则,隐含通用选择器(“*”)。换句话说,裸$(':focus')等同于$('*:focus')。如果您正在寻找当前关注的元素,$(document.activeElement)将检索它而无需搜索整个DOM树。

答案是:

document.activeElement

如果你想要一个包装元素的jQuery对象:

$(document.activeElement)

答案 1 :(得分:32)

$( document.activeElement )

将检索它而无需按照jQuery documentation

的建议搜索整个DOM树

答案 2 :(得分:6)

试试这个:

$(":focus").each(function() {
    alert("Focused Elem_id = "+ this.id );
});

答案 3 :(得分:5)

我在Firefox,Chrome,IE9和Safari中测试了两种方式。

(1)。 $(document.activeElement)在Firefox,Chrome和Safari中按预期工作。

(2)。 $(':focus')在Firefox和Safari中按预期工作。

我移动鼠标输入'name'并在键盘上按Enter键,然后我尝试获取焦点元素。

(1)。 $(document.activeElement)在Firefox,Chrome和Safari中返回输入:text:name,但它返回输入:IE9中的submit:addPassword

(2)。 $(':focus')返回输入:text:在Firefox和Safari中预期的名称,但IE中没有任何内容

<form action="">
    <div id="block-1" class="border">
        <h4>block-1</h4>
        <input type="text" value="enter name here" name="name"/>            
        <input type="button" value="Add name" name="addName"/>
    </div>
    <div id="block-2" class="border">
        <h4>block-2</h4>
        <input type="text" value="enter password here" name="password"/>            
        <input type="submit" value="Add password" name="addPassword"/>
    </div>
</form>

答案 4 :(得分:2)

怎么没人提到..

<asp:HyperLink ID="link" runat="server">
    <asp:Image ID="img" runat="server" 
        ImageUrl="~/images/app/your-img.png"
        onclick="openWinPopUp(this.src)" />
</asp:HyperLink>

<script>
    function openWinPopUp(URL, w, h, t, l) {
        var wdh = (w == null || w == "" || w == "undefined") ? 250 : w;
        var hgh = (h == null || h == "" || h == "undefined") ? 160 : h;
        var tp = (t == null || t == "" || t == "undefined") ? 200 : t;
        var lft = (l == null || l == "" || l == "undefined") ? 100 : l;
        window.open(URL, "blank", "toolbar=no,location=no,directories=no," +
            "status=no,menubar=no,scrollbars=yes," +
            "resizable=no,copyhistory=no," +
            "width=" + wdh + ", height=" + hgh + ", left =" + lft + "," +
            "top = " + tp + ";");
    }
</script>

我使用的是IE8,并没有在任何其他浏览器上测试过。在我的情况下,我正在使用它来确保一个字段至少4个字符并在表演之前集中注意力。输入第4个数字后,它会触发。该字段的ID为“年份”。我正在使用..

document.activeElement.id

答案 5 :(得分:0)

$(':focus')[0]将为您提供实际的元素。

$(':focus')将为您提供一系列元素,通常一次仅关注一个元素,因此,如果您以某种方式关注了多个元素,这会更好。

答案 6 :(得分:0)

尝试一下::

$(document).on("click",function(){
    alert(event.target);
    });

答案 7 :(得分:0)

如果要确认焦点是否在元素上,则

if ($('#inputId').is(':focus')) {
    //your code
}