Распространение события jQuery: fadeIn получает вызов несколько раз

#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 сек…

http://jsfiddle.net/FDjUm/7/

вот так 🙂

Редактировать

Немного лучший код:

http://jsfiddle.net/FDjUm/8/

Комментарии:

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');