Является ли jQuery.one(), возможно, плохая идея для присоединения нескольких обработчиков событий?

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

На странице должно быть что-то, что потребляет первый символ.Как я могу найти то, что это?

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

Единственные особенности, о которых я знаю в этой ситуации:

  • заранее был
    охватывающий всю страницу. Оверлей выведен на display:none; щелчком. Я попытался удалить div с помощью devTools, если он все еще перехватывает материал, но проблема осталась
  • свойства tabindex формы обрабатываются с помощью инструкций jQuery

Я проверял проблему в Chrome37, IE11 и FF32.

1 ответ

Хорошо, я нашел ошибку. Положим здесь решение и изменим название вопроса, потому что это интересно...

Просматривая код в десятый раз (очевидно, кто-то код)... Я наблюдаю особый способ привязки обработчика событий:

$(document).one("keydown mousedown touchstart", function(ev) { ev.preventDefault(); self.hideOverlayDiv();
})

$.one используется, вероятно, пытается избежать необходимости явно удалить обработчик событий после запуска.

Проблема: после того, как я потреблять mousedown обработчик события, есть еще два обработчика событий, готовые работать на keydown и touchstart событий. И когда я начинаю заполнять вход, onkeydown fella вторгается в мой первый символ.

Я изменил это так:

$(document).on("keydown mousedown touchstart", function(ev) { ev.preventDefault(); self.hidePopupError(); $(document).off("keydown mousedown touchstart");
})

licensed under cc by-sa 3.0 with attribution.