JQuery .click () не работает с шаблоном

0

Вот моя функция ajax, которая имеет переменную var var.

$.ajax({
type: "GET",
url: "/Home/GetComment",
dataType: "JSON",
success: 
    function (comments) {
        for (var i = 0; i < comments.length; i++)
        {

            var template = '<a id="like_button" class="like-comment" href="#">Like <span class="glyphicon glyphicon-thumbs-up"></span></a>'
        }

    }
});


$("#like_button").click(function (evt) {
    $.ajax({
        type: "POST",
        url: "/Home/AddLikes",
        data: { "likeid": id },
        dataType: "JSON",
        success:
            function () {
                alert('alert');
            }
    });
});

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

Это код в представлении Index, где он имеет тот же идентификатор, что и шаблон в шаблоне:

<a id="like_button" class="like-comment" href="#">Like <span class="glyphicon glyphicon-thumbs-up"></span></a>
  • 0
    Старая добрая делегация
Теги:
asp.net-mvc

5 ответов

0
Лучший ответ

делегировать мероприятие:

$(document).on('click', "#like_button", function (evt) {

и измените ваш var id на class:

var template = '<a class="like-comment like_button" href="#">Like <span class="glyphicon glyphicon-thumbs-up"></span></a>'

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

вам нужно найти ближайшего статического родителя этого элемента, который может быть div с определенным определенным классом или $(document), $(document.body) который всегда доступен для делегирования события.

0

html-код:

 <div id="cntr"></div>

Код js:

$(document).ready(function(){
$.ajax({
   type: "GET",
   url: "/Home/GetComment",
   dataType: "JSON",
   success: function (comments) {
       var template = '';
       for (var i = 0; i < comments.length; i++) {

            template += '<a id="like_button" class="like-comment" href="#">Like     <span class="glyphicon glyphicon-thumbs-up"></span></a>'
        }

       $('#cntr').html(template);
       addEvent();
   }
  });

 function addEvent() {
    $("#like_button").on('click', function (evt) {
      $.ajax({
          type: "POST",
          url: "/Home/AddLikes",
          data: { "likeid": id },
          dataType: "JSON",
          success: function (d) {
              alert('Here');
          }
      });
   });
  }
});
0

Попробуй это

$("body").on("click", "#like_button", function (evt) {
    $.ajax({
        type: "POST",
        url: "/Home/AddLikes",
        data: { "likeid": id },
        dataType: "JSON",
        success:
            function () {
                alert('alert');
            }
    });
});
0

Когда функция jQuery, определяющая щелчок на методе, выполняется, кнопка еще не создана! Вы должны добавить метод click к элементу, который уже существует (тело всегда есть).

Таким образом, функция ниже читается так: Когда вы нажимаете на тело, найдите like_button (если он есть) и щелкните по нему (делегируйте ему событие) :).

$("body").on("click", "#like_button", function (evt) {
    $.ajax({
        type: "POST",
        url: "/Home/AddLikes",
        data: { "likeid": id },
        dataType: "JSON",
        success:
            function () {
                alert('alert');
            }
    });
});
0

Я думаю, в настоящее время вы дублировали id, вы должны использовать класс вместо своей кнопки:

var template = '<a class="like_button" class="like-comment" href="#">Like <span class="glyphicon glyphicon-thumbs-up"></span></a>'

Затем вы можете использовать делегирование событий для присоединения событий для динамически загружаемых элементов:

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

$('body').on('click','.like_button',function() {
    // Your code here
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню