@minihilator
junior fronend developer

Почему не срабатывает click с первого раза на ajax подгруженных элементах?

Суть проблемы: Есть на сайте поиск. Когда input получает фокус - появляется ниже блок с популярными запросами. Каждый запрос - это ссылка на продукт. При вводе в input текста ajax-ом подгружаются совпавшие с запросом ссылки.
Так вот - если input получил фокус и я нажимаю на популярные результаты поиска (ничего не введя) - все прекрасно, ссылка срабатывает, но стоит мне ввести одну букву и затем кликнуть по результату поиска - input теряет фокус и все. При повторном нажатии на ссылку все отлично отрабатывает. Не подскажете как это решить? Если не понятно обьяснил - вот ссылка на сайт
  • Вопрос задан
  • 856 просмотров
Пригласить эксперта
Ответы на вопрос 2
@SharuPoNemnogu
не язык плохой, программисты такие...
вы где то перебиваете событие клика. Скорее всего в header.js. Попробуйте заменить на $('body').on('click', '.keyword a', function() {...});
Ответ написан
twiSk
@twiSk
Full-stack web developer
Я нашел у Вас довольно странную часть кода, которая связана с поиском:

$('.dn-hot-worlds').on('click', 'a', function(){
    $(document).load(this.href);
    $('input.search-text').focus();
});
$('.keyworld a').on('click', function(){
    $('input.search-text').focus();
    location.href = $(this).attr('href');
});
$('.dn-hot-worlds').on('click', function(){
    $('input.search-text').focus();
});


Попробуйте просто закомментировать этот кусок.

UPD

Нашел в site.min.js следующий код:

$('#search-text').on("change paste keyup", function() {search();})


На ваше поле поиска навешаны 3 события. Во время вставки или ввода текста срабатывает либо paste, либо keyup соответственно, а change срабатывает только когда input теряет focus, поэтому при первом клике на результат срабатывает событие change и данные повторно загружаются по ajax. Следовательно надо убрать отсюда "change".

P.S. Советую также добавить для keyup исключения таких клавиш, как shift, ctrl и т.п., чтобы не отправлялся лишний раз запрос.
Ответ написан
Ваш ответ на вопрос

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

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