События щелчка тега привязки не работают после отображения данных с использованием ajax

Когда я перезагружаю страницу, я вызываю ajax, чтобы получить данные и отобразить их на экране.

<div class = "empList"><ul></ul></div>

<script>
$(document).ready(function() {
  $.ajax({
    url: 'process.php',
    method: 'post',
    dataType: "json",
    data: {
      action: "employeelist"
    },
    success: function(data) {
      var trHTML = '';

      $.each(data, function(i, item) {
        trHTML += '<li><div class = "employeeShareWrap"><a href = "javascript:void(0);" class = "shareSocial" data-id = "' + item.id + '">Share</a></div></li>';
      });
      $('.empList ul').append(trHTML);
    }
  })
});

//clicking on the share button 
$(".employeeShareWrap>a").click(function(e) {
  e.preventDefault();
  console.info('hi');
  alert("hello");
});
// this is the second way i tried
/*
   $(".employeeShareWrap>a").click(function(){
    var otherInput=$(this).data("id");  
    alert(otherInput);
    alert("hello");
   });*/
<script>

На данный момент я показываю кнопку «Поделиться» для целей тестирования. Теперь моя проблема заключается в том, что когда я нажимаю кнопку «Поделиться», я не получаю никаких предупреждений. В консоли нет ошибки.

И если я добавил прямо в HTML, то это работает.

<li><div class = "employeeShareWrap"><a href = "javascript:void(0);" class = "shareSocial" data-id = "51">Share</a></div></li>
<script type = "text/javascript">
        
$(".employeeShareWrap>a").click(function(e){
e.preventDefault();
console.info('hi');
alert("hellow");

});
    </script>

Что-то не так с моим скриптом или я неправильно его отображаю?

Аналогичный вопрос: stackoverflow.com/questions/9610267/…

react_or_angluar 12.12.2020 20:27

Спасибо, что поделились справочной ссылкой. Буду обращаться в будущем.

user9437856 12.12.2020 20:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
295
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это связано с тем, что тег привязки еще не был создан к тому времени, когда вы пытаетесь прикрепить к нему слушателя. Вместо этого рассмотрите возможность использования метода on:

$(document).on('click', '.employeeShareWrap > a', function(e){
    e.preventDefault();
    console.info('hi');
    alert("hellow");
});

Ой! Спасибо за информацию. Да, работает отлично. Еще одна вещь. Я добавил второй способ в вопросе. Это лучший способ?

user9437856 12.12.2020 20:29

Если ваш тег привязки не визуализируется динамически с помощью JS и является статическим, рекомендуется использовать второй способ.

Vasilis G. 12.12.2020 20:30

Обратите внимание, что существует несколько подписей on(), и в этой используется селектор делегирования. on() сама по себе не обязательно решает проблему

charlietfl 12.12.2020 20:33

Другие вопросы по теме