JQuery: как узнать, имеет ли элемент ввода фокус
Я разрабатываю приложение (игру), которое можно контролировать с помощью клавиатуры. Проблема в том, что он также содержит некоторые элементы ввода по умолчанию (например, поля формы входа). Чтобы предотвратить реакцию игры на нажатия клавиш, когда пользователь вводит свои учетные данные, я делаю такую проверку:
if (isDef($("*:focus").attr("id")))
return;
Он отлично работает практически во всех основных браузерах, но IE. В Internet Explorer div также может сосредоточиться на них, и почти в каждом случае на него сосредоточен какой-то элемент на странице. Таким образом, я хочу проверить, не имеет ли какой-то элемент фокуса, но какой-то элемент, который может принимать ввод с клавиатуры, имеет фокус. В моем случае это ограничивается textarea или input. Как проверить, имеют ли элементы этих двух типов фокус?
Ответы
Ответ 1
Вы можете сделать это легко, используя выражение jquery is.
if($("input,textarea").is(":focus")){
//input and text area has focus
}
else{
//no focus for input and textarea
}
если вы хотите проверить фокус только текстового поля вместо каждого элемента ввода, а затем изменить ввод с помощью ввода ['text']
Ответ 2
if ( $("*:focus").is("textarea, input") ) return;
Ответ 3
Добро пожаловать в 2015 год, где вам не нужен jQuery для такого рода вещей. Vanilla JS поддерживает HTMLELement.matches(Query:String)
так что мы можем сделать что-то вроде,
var el = document.getElementById("El")
if(el.matches(":focus")) // true or false (You can use other CSS selectors too)
Ответ 4
Вот пример моего примера кода, который может вам помочь.
// add the "hover" class when got focus
$('.icheckbox_square-green').focusin(function () {
$(this).addClass('hover');
});
// Remove the "hover" class when lost focus
$('.icheckbox_square-green').focusout(function () {
$(this).removeClass('hover');
});
Ответ 5
Альтернативным решением "raw javascript" для вашей проблемы может быть использование свойства element.tabIndex
.
canvas.tabIndex = 0;
Это позволит вам использовать этот
canvas.onkeydown = function(){
...
}
Вместо этого
document.body.onkeydown = function(){
...
}
Таким образом, чтобы контролировать холст, вы должны сначала сосредоточиться на нем - точно так же, как флеш-игра.
Когда холст не сфокусирован, он ничего не сделает. И вы сможете ввести в соседнее текстовое поле, не вмешиваясь в холст.
Вы также можете дать некоторую визуальную индикацию о том, что холст сфокусирован, используя псевдоселектор :focus
в css:
canvas:focus{
...
}
Я уверен, что существует эквивалентное свойство tabIndex
в jQuery. Я также уверен, что IE поддерживает свойство tabIndex
.
Надеюсь, что поможет