jQuery로 초점을 맞춘 요소를 얻는 방법?


답변:


740
// 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 문서를 인용 :

다른 의사 클래스 선택기 ( ":"로 시작하는 선택기)와 마찬가지로 태그 이름이나 다른 선택기가있는 focus를 사용하는 것이 좋습니다. 그렇지 않으면 범용 선택기 ( "*")가 내포됩니다. 즉, 베어는와 $(':focus')같습니다 $('*:focus'). 현재 초점을 맞춘 요소를 찾고 있다면 $ (document.activeElement)는 전체 DOM 트리를 검색하지 않고도 요소를 검색합니다.

정답은:

document.activeElement

그리고 요소를 래핑하는 jQuery 객체를 원한다면 :

$(document.activeElement)

2
그러나 잠깐 만요, 캐럿이있는 요소는 어떻게 얻습니까?
dave

@ 데이브. "캐럿 있음 "은 무엇을 의미 합니까? 집중? 마우스가 위에 있습니까?
gdoron은

여기 내 상황이 있습니다 : 특정 요소를 클릭하면 마지막으로 초점을 맞춘 입력 텍스트 요소에 문자를 배치하고 싶습니다. 기본적으로 특정 요소를 클릭하기 전에 마지막 또는 바로 초점을 맞춘 요소입니다.
dave

1
@ 데이브. 할 수 없습니다. IE에만이 기능이 있다고 생각하지만 다른 질문을하고 있다면 새로운 질문에서해야합니다.
gdoron은

3
$focusedvar가 jquery 객체임을 나타 내기 위해 $ 접두사 변수 이름을 사용한 방법이 마음 에 듭니다. TYVM.
Valamas

36
$( document.activeElement )

jQuery 문서 에서 권장하는대로 전체 DOM 트리를 검색하지 않고도 검색합니다.


1
캐럿이있는 요소를 얻는 방법?
dave

6

Firefox, Chrome, IE9 및 Safari에서 두 가지 방법을 테스트했습니다.

(1). $(document.activeElement)Firefox, Chrome 및 Safari에서 예상대로 작동합니다.

(2). $(':focus')Firefox 및 Safari에서 예상대로 작동합니다.

마우스로 이동하여 'name'을 입력하고 키보드에서 Enter 키를 누른 다음 초점을 맞춘 요소를 얻으려고했습니다.

(1). $(document.activeElement)Firefox, Chrome 및 Safari에서 예상대로 input : text : name을 반환하지만 IE9에서는 input : submit : addPassword를 반환합니다.

(2). $(':focus')Firefox 및 Safari에서 예상대로 input : text : name을 반환하지만 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>

5

이 시도:

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

그렇기 때문에이 루프에는 반복이 하나만 있습니다. 경보는 단지 예를 보여주기위한 것입니다. 이 변수가 있으면 원하는 요소로 모든 것을 할 수 있습니다.
Adil Malik

둘 이상의 요소에 초점을 맞추는 방법은 무엇입니까?
Andreas Furster

@AndreasFurster 당신이 맞아요. 이 루프에는 항상 하나의 반복 만 있습니다. 이것이 목표를 달성하는 가장 좋은 방법은 아니지만 효과가 있습니다.
Adil Malik

이것이 왜 최악의 / 가장 효율적인 방법인지 알아 보려면 허용 된 답변을 참조하십시오. (필요하지 .each않은 견딜)
브래드 켄트

2

아무도 언급하지 않았습니다 ..

document.activeElement.id

IE8을 사용하고 있으며 다른 브라우저에서 테스트하지 않았습니다. 필자의 경우 필드를 최소 4 자 이상으로 설정하고 동작 전에 초점을 맞추는 데 사용합니다. 네 번째 숫자를 입력하면 트리거됩니다. 필드의 ID는 '년'입니다. 사용 중입니다 ..

if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
    // action here
}

1

$(':focus')[0] 실제 요소를 제공합니다.

$(':focus') 요소 배열을 제공합니다. 일반적으로 한 번에 하나의 요소 만 초점을 맞추므로 여러 요소에 초점을 맞춘 경우에만 더 좋습니다.



0

초점이 요소에 있는지 확인하려면

if ($('#inputId').is(':focus')) {
    //your code
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.