Используя jQuery, как я могу получить элемент ввода, который имеет фокус каретки (курсора)?
Или, другими словами, как определить, имеет ли вход фокус каретки?
Используя jQuery, как я могу получить элемент ввода, который имеет фокус каретки (курсора)?
Или, другими словами, как определить, имеет ли вход фокус каретки?
Ответы:
// 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')
. Если вы ищете фокусированный в данный момент элемент, $ (document.activeElement) найдет его без необходимости поиска по всему дереву DOM.
Ответ:
document.activeElement
И если вам нужен объект jQuery, обертывающий элемент:
$(document.activeElement)
$focused
как я предполагаю, что вы делаете это для обозначения var как объекта jquery. TYVM.
$( document.activeElement )
Получит его без необходимости поиска по всему дереву DOM, как рекомендовано в документации jQuery.
Я протестировал два способа в Firefox, Chrome, IE9 и Safari.
(1). $(document.activeElement)
работает как положено в Firefox, Chrome и Safari.
(2). $(':focus')
работает как положено в Firefox и Safari.
Я переместился в мышь, чтобы ввести «имя», и нажал «Ввод» на клавиатуре, затем попытался получить сфокусированный элемент.
(1). $(document.activeElement)
возвращает входные данные: текст: имя, как и ожидалось в Firefox, Chrome и Safari, но возвращает входные данные: submit: addPassword в IE9
(2). $(':focus')
возвращает ввод: текст: имя, как и ожидалось в 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>
Попробуй это:
$(":focus").each(function() {
alert("Focused Elem_id = "+ this.id );
});
.each
не выдерживающие)
Как это никто не упомянул ..
document.activeElement.id
Я использую IE8 и не тестировал его ни в одном другом браузере. В моем случае я использую его, чтобы убедиться, что поле содержит минимум 4 символа и сфокусировано перед действием. Как только вы введете 4-е число, оно сработает. Поле имеет идентификатор года. Я использую..
if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
// action here
}
$(':focus')[0]
даст вам фактический элемент.
$(':focus')
даст вам массив элементов, обычно только один элемент фокусируется за раз, так что это будет лучше, если вы как-то сфокусировали несколько элементов.
Попробуй это::
$(document).on("click",function(){
alert(event.target);
});
Если вы хотите подтвердить, что фокус находится на элементе, то
if ($('#inputId').is(':focus')) {
//your code
}