@Jagorm

Событие keyup в jquery вызывается дважды, почему так происходит?

Требуется реализовать возможность отправки формы по нажатию Enter. В обычном джаваскрипте всё работает отлично, но в jquery то же самое событие по какой-то причине вызывается дважды.

Код на обычном джаваскрипте (всегда выводится одна единица в консоль):
document.querySelector('*').addEventListener('keyup', function (event) {
    if (event.keyCode === 13) {
        button.click();
        console.log(1);
    }
})

Код с использованием Jquery (при каждом нажатии в консоль выводится по две единицы за раз):
$('*').keyup(function (event) {
    if (event.keyCode === 13) {
        button.click();
        console.log(1);
    }
});

Почему так происходит?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 2
Mike_Ro
@Mike_Ro Куратор тега JavaScript
Python, JS, WordPress, SEO, Bots, Adversting
В JQuery есть такое понятие "всплытие событий", используя $('*') Вы практически заюзали querySelesctorAll('*') (из чистого JS) и тем самым повесили события на все дочерние элементы.
// выбирайте не все элементы
$('*')
// а более конкретные
$('.item')
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
document.querySelector('*').addEventListener('keyup', function (event) {
- взять один (первый) элемент, соответствующий селектору и навесить на него обработчик события keyup. Этим элементом будет <html>.
$('*').keyup(function (event) { - на все элементы, соответствующие селектору, навесить обработчик события keyup.
А дальше работает всплытие событий. Когда вы нажимаете на клавишу, то событие поочерёдно срабатывает на элементе, на котором стоит фокус, и на всех его родителях.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы