Изменение фокуса между веб-входами

В веб-контексте JavaScript/jQuery наличие:

  • Два поля ввода текста формы, A и B, которые включены
  • Поля ввода должны быть отключены, если ни одно из них не имеет фокуса

т.е. с помощью функции focusout jQuery, чтобы проверить, когда и A, и B теряют фокус, работает нормально, но когда A теряет фокус на B (вкладка или выбор B), я не могу проверить, получил ли B еще фокус, поскольку A фокусируется перед фокусом смена завершена.

Как я могу проверить с помощью focusout или аналогичного, что и A, и B потеряли фокус при переключении между полями ввода?

Пример:

Отключает поля ввода, когда оба теряют фокус, но, к сожалению, также и при переключении между ними, что не является намерением.

$('input').focusout(function() {
    if ($(':focus').length === 0) { // does not count the other input yet
        $("input").prop('disabled', true);
    }
});

https://jsfiddle.net/hbypowv4/


person ralftar    schedule 28.05.2015    source источник
comment
Покажите нам код того, что у вас есть до сих пор   -  person Robin-Hoodie    schedule 28.05.2015
comment
Как вы можете focus в одном из этих input полей, если оба они disabled; или я пропустил некоторые из требований?   -  person Gideon    schedule 28.05.2015
comment
Один из них загружен с автофокусом   -  person ralftar    schedule 28.05.2015
comment
Вы не можете сосредоточиться на отключенных полях, поэтому для этого элемента нет события onFocus...   -  person Avinash    schedule 28.05.2015
comment
Поля ввода не отключены по умолчанию   -  person ralftar    schedule 28.05.2015
comment
Обновлено с примером.   -  person ralftar    schedule 28.05.2015


Ответы (2)


Вы можете использовать MouseEvent.relatedTarget, чтобы проверить, не теряет ли A фокус Б

Доступное только для чтения свойство MouseEvent.relatedTarget является вторичной целью события, если таковая имеется.

https://jsfiddle.net/hbypowv4/2/

person Tobías    schedule 28.05.2015
comment
Пожалуйста! К сожалению, похоже, что в Firefox (Gecko) есть ошибка: bugzilla.mozilla.org/ show_bug.cgi?id=962251 - person Tobías; 28.05.2015

Вы можете сделать это с помощью window.setTimeout() следующим образом:

$(document).ready(function() {
  $('input').focusout(function() {
    window.setTimeout(function() {
        if ($(':focus').length === 0) {
            $("input").prop('disabled', true);
        }
    }, 5);
  });    
});
person kaarel    schedule 28.05.2015
comment
Однако это зависит от условий гонки. - person Siguza; 28.05.2015
comment
@kaarel Да, я знаю. Но я считаю это взломом, так как я не знаю, все ли готово через 5 мс ... однако это может быть то, с чем я закончу. - person ralftar; 28.05.2015