Использование jQuery для проверки фокусировки ввода

Взгляните на HttpURLConnection класс документации API , особенно setInstanceFollowRedirects().

535
задан Michał Perłakowski 13 January 2016 в 20:52
поделиться

10 ответов

jQuery 1.6+

В jQuery добавлен селектор : focus , поэтому нам больше не нужно добавлять его самостоятельно. Просто используйте $ (".."). Is (": focus")

jQuery 1.5 и ниже

Изменить: Со временем мы находим лучшие методы для проверки фокуса, новый фаворит это суть от Бена Алмана :

jQuery.expr[':'].focus = function( elem ) {
  return elem === document.activeElement && ( elem.type || elem.href );
};

Цитата из Матиаса Биненса здесь :

Обратите внимание, что (elem.type || elem.href) test был добавлен для фильтрации ложных срабатываний, таких как body. Таким образом, мы отфильтровываем все элементы, кроме элементов управления формой и гиперссылок.

Вы определяете новый селектор. См. Плагины / Разработка . Затем вы можете сделать:

if ($("...").is(":focus")) {
  ...
}

или:

$("input:focus").doStuff();

Any jQuery

Если вы просто хотите выяснить, какой элемент имеет фокус, вы можете использовать

$(document.activeElement)

Если вы не уверены, будет ли версия 1.6 или ниже , вы можете добавить селектор : focus , если он отсутствует:

(function ( $ ) {
    var filters = $.expr[":"];
    if ( !filters.focus ) { 
        filters.focus = function( elem ) {
           return elem === document.activeElement && ( elem.type || elem.href );
        };
    }
})( jQuery );
904
ответ дан 22 November 2019 в 22:20
поделиться

What I wound up doing is creating an arbitrary class called .elementhasfocus which is added and removed within the jQuery focus() function. When the hover() function runs on mouse out, it checks for .elementhasfocus:

if(!$("#quotebox").is(".boxhasfocus")) $(this).removeClass("box_border");

So if it doesn't have that class (read: no elements within the div have focus) the border is removed. Otherwise, nothing happens.

0
ответ дан 22 November 2019 в 22:20
поделиться

Нет: focus, но есть: selected http://docs.jquery.com/Selectors/selected

, но если вы хотите изменить внешний вид вещей в зависимости от того, что выбрано, вам, вероятно, следует работать с событиями размытия.

http: // docs.jquery.com/Events/blur inventory

0
ответ дан 22 November 2019 в 22:20
поделиться

Следите за обоими состояниями (наведен, сфокусирован) как истинные / ложные флаги, и при каждом изменении запускайте функцию, которая удаляет границу, если оба ложны, в противном случае отображает границу.

Итак : onfocus устанавливает focus = true, onblur устанавливает focus = false. onmouseover устанавливает hovered = true, onmouseout устанавливает hovered = false. После каждого из этих событий запускается функция, которая добавляет / удаляет границу.

0
ответ дан 22 November 2019 в 22:20
поделиться

Насколько я знаю, вы не можете спрашивать браузер, имеет ли какой-либо ввод на экране фокус, вам нужно настроить какое-то отслеживание фокуса.

Обычно у меня есть переменная noFocus, и я устанавливаю для нее значение true. Затем я добавляю событие focus ко всем входам, которое делает noFocus ложным. Затем я добавляю событие размытия ко всем входам, которое устанавливает для noFocus значение true.

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

После этого создан, вы можете проверить noFocus перед заменой границ.

0
ответ дан 22 November 2019 в 22:20
поделиться

Я не совсем уверен, что вам нужно, но похоже, что этого можно достичь, сохранив состояние входных элементов (или div?) В виде переменной:

$('div').each(function(){

    var childInputHasFocus = false;

    $(this).hover(function(){
        if (childInputHasFocus) {
            // do something
        } else { }
    }, function() {
        if (childInputHasFocus) {
            // do something
        } else { }
    });

    $('input', this)
        .focus(function(){
            childInputHasFocus = true;
        })
        .blur(function(){
            childInputHasFocus = false;
        });
});
2
ответ дан 22 November 2019 в 22:20
поделиться

Альтернативой использованию классов для обозначения состояния элемента является внутреннее хранилище данных .

PS: Вы можете хранить логические значения и все, что пожелаете с помощью функции data () . Дело не только в строках :)

$("...").mouseover(function ()
{
    // store state on element
}).mouseout(function ()
{
    // remove stored state on element
});

И тогда дело просто в доступе к состоянию элементов.

1
ответ дан 22 November 2019 в 22:20
поделиться

CSS:

.focus {
    border-color:red;
}

JQuery:

  $(document).ready(function() {

    $('input').blur(function() {
        $('input').removeClass("focus");
      })
      .focus(function() {
        $(this).addClass("focus")
      });
  });
44
ответ дан 22 November 2019 в 22:20
поделиться

Думали ли вы об использовании mouseOver и mouseOut для имитации этого. Также обратите внимание на mouseEnter и mouseLeave

1
ответ дан 22 November 2019 в 22:20
поделиться

Существует плагин для проверки фокусировки элемента: http://plugins.jquery.com/project/focused

$('input').each(function(){
   if ($(this) == $.focused()) {
      $(this).addClass('focused');
   }
})
0
ответ дан 22 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: