#javascript #jquery #focus #bind
#javascript #jquery #фокус #привязать
Вопрос:
У меня есть диалоговое окно пользовательского интерфейса jquery с динамически загружаемыми вкладками / JSON с содержимым. Из-за сложности я не могу опубликовать скрипку или соответствующий код (слишком много кода).
Что происходит, так это то, что когда открывается диалоговое окно, вы можете просматривать элементы в диалоговом окне, вплоть до первой вкладки. После этого вы не сможете перейти в другое место. Фокус заблокирован на этой вкладке, даже если вы щелкните в другом месте, этот фокус заблокирован на этой вкладке.
Я не могу определить фактическую причину этой проблемы.
Итак, как бы мне удалить фокус программно?
Комментарии:
1. Какой браузер вы используете? В IE вы иногда теряете фокус без уважительной причины.
2. Было ли перезаписано событие нажатия клавиши для TAB для ручного управления переключением фокуса (как это можно сделать при отображении модальных диалоговых окон)?
3. единственное место, где я вижу событие нажатия клавиши, — это то, что функция нажатия клавиши может нажимать стрелку вниз на содержимое вкладки. И это во всех браузерах.
Ответ №1:
Комментарии:
1. Это правильный ответ, однако я не сказал / не объяснил свою ситуацию четко. Я буду обновлять соответствующим образом. Спасибо.
2. Это отлично работает и решило аналогичную проблему, с которой я столкнулся. Одно быстрое изменение, которое я бы рекомендовал, если вы используете jQuery и вам нужно применить это в общем к области событий, вы можете сделать что-то вроде этого:
$(document.activeElement).blur()
— все, что активно, потеряет фокус во время события.3. Как это сделать с помощью чистого JavaScript?
4. Вы можете использовать blur() и focus() с чистым javascript: developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement /…
Ответ №2:
Попробуйте запустить blur
событие в поле, которое вы хотите потерять фокус.
Ответ №3:
Я бы ввел множество предупреждений, чтобы найти, где происходит сбой JS. Например.
alert(1);
var a = 10;
alert(2);
var b = null;
alert(3);
a = 5;
alert(4);
b.hello();
alert(5);
Очевидно, что в этом примере последним предупреждением будет 4.
Это не очень хороший подход, но каждый должен это сделать в какой-то момент.
Комментарии:
1. Оповещение — это неправильный способ отладки, особенно если оно реагирует на перемещение мыши, наведение курсора мыши или аналогичные события. В настоящее время почти в любом браузере есть консоль отладки, в которую вы можете записывать, используя
console.log(...);
2. Правильный способ отладки — это то, что помогает вам отследить ошибку наиболее эффективным способом. Оповещения играют очень полезную роль в отладке, поскольку они приостанавливают выполнение. Только вчера я отлаживал глючную анимацию jQuery и
console.log()
был бесполезен для точного определения, откуда взялся этот визуальный сбой, потому что это произошло так быстро. Добавление предупреждений приостанавливало анимацию на каждом шаге и позволяло мне точно определить, где произошел сбой. Вы правы, что метод OPs не является правильным способом иconsole.log()
лучше в этом случае, ноalert()
имеет место при отладке.3. @Гэвин и остальные. Тогда лучше использовать
debugger
команду (по крайней мере, в браузерах, которые ее поддерживают). Это приостанавливает выполнение, но все же позволяет вам использовать ваши инструменты разработчика для изучения того, что происходит. С помощью alert все, что вы получаете, это визуальный снимок текущего состояния, что не всегда помогает.