Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему второй раз не вызывается файл php? Ajax

Давид Мейстер Мастер (2089), на голосовании 2 года назад
Ajax код:При нажатии первый раз на .menu__skins-sell вызывается файл ajax_profile.php, но на второй раз уже не срабатывает хотя там тоже есть .menu__skins-sell и импортирован ajax.
Код первой страницы: Код страницы которая вызывается:
Голосование за лучший ответ
Денис Манз Знаток (427) 2 года назад
Потому что ты тупой ламер
КулХацкер Мыслитель (6871) 2 года назад
У чертей всегда так
Давид МейстерМастер (2089) 2 года назад
Я бы с твоим кпд лучше бы молчал..
КулХацкер Мыслитель (6871) Давид Мейстер, свой КПД не смотрел?
Дмитрий Царь Мудрец (11433) 2 года назад
JS-события не вешаются на элементы, которые появляются на странице после её загрузки.

Фактически в момент, когда браузер парсит событие .click() или .on("click", ...) – он вешает на каждый элемент, подходящий под параметры, свойство, что ему нужно будет сделать, если на него кликнут. На новые элементы, появившиеся уже после парсинга .click() или .on() браузер не вешает такие свойства – они остаются null.

То есть события останутся прикреплены к элементам, которые и так уже были на странице, когда она отобразилась в браузере, но на загруженные с помощью AJAX элементы события действовать не будут.

Вам нужно либо заново инициализировать события после того, как вы загрузили элементы через AJAX:
 $(".any-element").click(functionName(...));

function functionName(...) {
$.ajax({
// параметры AJAX-запроса
success: function (result) {
// выводим контент на страницу

$(".any-element").click(functionName()); // заново вешаем события на появившиеся элементы
}
});
}
Либо использовать конструкцию, которая вешает событие не на конкретные элементы, а на document:
 $(document).on("click", ".any-element", function() {...}); 
В этом варианте событие on-click вешается на document, но вызывается только если дочерним элементом документа (таргетом) является элемент с классом class="any-element".

Конкретно в вашем случае достаточно заменить первую строку приведённой JS-функции, в которой выполняется AJAX-запрос (первый скрин из вопроса) на:
 $(document).on("click", ".menu__skins-sell", function () { 
Давид МейстерМастер (2089) 2 года назад
Немного не понимаю где вы в вашем примере заново инициализируете событие? Если вы просто проверяете нажат ли ".any-element" что и сделано к меня
Дмитрий Царь Мудрец (11433) Давид Мейстер, в куске:
 success: function (result) { 
    // выводим контент на страницу 
 
    $(".any-element").click(functionName()); // повторная инициализация событий
} 
Давид МейстерМастер (2089) 2 года назад
*у меня
Похожие вопросы