#jquery
#jquery
Вопрос:
Вот мой базовый вариант. Если я нажму на Text
, текстовое поле исчезнет, и фокус будет сосредоточен на этом текстовом поле. Когда я нажимаю Esc, текстовое поле исчезнет и Text
снова исчезнет. http://jsfiddle.net/FDjUm /. У меня есть два вопроса. Пожалуйста, обратитесь к приведенному ниже jsfiddle для наглядной демонстрации моих вопросов
1) http://jsfiddle.net/FDjUm/4 Я ввожу окно предупреждения в focus
, и оно вызывается бесконечно. Почему это и как я могу это исправить?
2) http://jsfiddle.net/Zh8HR/13 / Я ввел окно предупреждения в fadeIn
. Оповещение вызывается многократно (не бесконечно). Итак, я ставлю return false
тогда в первый раз (первый щелчок и нажатие Esc), он отлично работает (окно предупреждения появляется только 1 раз). Но чем больше вы нажимаете и esc, тем чаще появляется окно предупреждения? Почему и как это исправить?
Я новичок в jQuery, поэтому подвергайтесь критике, если способ, которым я пишу jQuery, неправильный. И я хочу учиться и писать хороший код.
Ответ №1:
Предупреждение приводит к потере фокуса. После нажатия кнопки ok фокус возвращается.
Что приводит к отображению предупреждения, которое приводит к потере фокуса. и т.д. и т.п. и т.п.
Для номера 2
Просто переместите keyup
функцию внешнего фокуса.
Давайте я исправлю эту проблему для вас. 1 сек…
вот так 🙂
Редактировать
Немного лучший код:
Комментарии:
1. если я удалю нажатие клавиши, то при нажатии Esc ничего не произойдет. Вот jsfiddle. jsfiddle.net/Zh8HR/12
2. @OP: Удаление было опечаткой, это должно было быть move 🙂 Сейчас я это исправил.
3. @OP: Я также немного изменил код (см. Редактирование моего ответа). Я использовал это как ссылку на элемент
4. @Harry: каждый раз, когда элемент попадал в фокус, вводом ключа была привязка. Таким образом, в основном он привязывал ввод ключа несколько раз (по 1 разу для каждого фокуса) к элементу. В результате появляется несколько сообщений.
5. Не думаю, что вам нужно беспокоиться о распространении при fadeIn fadeOut. Проблема с click заключается в том, есть ли у вас контейнер с элементом в нем. Если вы щелкаете по ‘внутреннему’ элементу, вы, по сути, также щелкаете по родительскому контейнеру.
Ответ №2:
Возможно, вы могли бы убрать фокус на клавише ESC:
jQuery("#textBox").blur().hide();
Я думаю, что вы скрываете текстовое поле, но текстовое поле все еще находится в фокусе…
Ответ №3:
исправление для первого (и, возможно, второго) заключается в изменении строки
jQuery("#textBox").focus();
для использования функции $.triggerHandler() :
jQuery("#textBox").triggerHandler('focus');