Проверьте, есть ли какой-либо элемент в фокусе?

0

У меня есть селектор, который выбирает несколько элементов. Я хочу проверить, имеет ли хотя бы один из этих элементов фокус.

Экспериментируя, я заметил, что. .is(":focus") и .has(":focus") не работают при работе с несколькими элементами, см. Ниже:

console.log( $('.text-block').is(":focus") ); // prints false
console.log( $('.text-block').has(":focus") ); // prints empty object array
console.log( $('.text-block').filter(":focus") ); // prints empty object array
console.log( $('.text-block:focus') ); // prints one element (works!)

поскольку :focus селектор выбора кажется единственным способом, мой вопрос: как сделать, если мои элементы ($('.text-block')) находятся в переменной (например, $myElements)?

(Второй вопрос должен был бы понять, почему только :focus селектор :focus работает для меня.)

  • 1
    Что вы подразумеваете под «хотя бы один элемент имеет фокус»? Вы можете сосредоточиться только на одном элементе в документе за раз, этот элемент - document.activeElement
  • 0
    извините, я имею в виду, если какой-то из элементов имеет фокус, спасибо
Показать ещё 2 комментария
Теги:

3 ответа

1
Лучший ответ

Перебирайте каждый элемент и проверяйте, имеет ли он :focus.

$('.text-block').each(function() {
    if ($(this).is(':focus')) {
        console.log('This element has focus!');
    }
});

Я тестировал это с помощью некоторых базовых входов HTML, и он работает: http://jsbin.com/aTaqagOz/1/ (JSBin, над которым я работал, работал, но предварительный просмотр выглядит не таким)

Может быть, ваши элементы не фокусируются правильно?

  • 0
    Вы проверяли это? Это не работает для меня.
  • 0
    Я протестировал его, и он работал в редакторе JSBin, но не в режиме предварительного просмотра / публикации. Возможно, вы захотите попробовать в вашей среде разработки. Редактировать: я только что попробовал это у себя, и это, кажется, работает, хотя событие focus не запускается, когда я фокусируюсь на элементе, что странно
0

Попробуй это:

$('text').each(function() {
    if ($(this).is(':focus')) {
        console.log('This element has focus!');
    }
});
0

как вы можете прочитать здесь http://api.jquery.com/focus-selector/ is(":focus") - это путь. если он возвращает false, что означает, что он не имеет фокуса.

вы также можете получить сосредоточенный элемент по $( document.activeElement ).

как указано в документе jquery, поддерживаемом с версии 1.6. Я знаю, что это длинный снимок, но может быть у вас более старая версия.

  • 0
    в соответствии с моими журналами, is (": focus") не работает, проверьте код выше, selector: focus (без is ()), хотя работал
  • 0
    я вижу, потому что $ ('. text-block') возвращает массив, я не уверен, как это работает. проверяет все из них, первый только последний только один. Вы можете зацикливаться на каждом или просто отметьте $ ('. text-block: focus'). length
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню