Вот моя функция 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>
делегировать мероприятие:
$(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)
который всегда доступен для делегирования события.
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');
}
});
});
}
});
Попробуй это
$("body").on("click", "#like_button", function (evt) {
$.ajax({
type: "POST",
url: "/Home/AddLikes",
data: { "likeid": id },
dataType: "JSON",
success:
function () {
alert('alert');
}
});
});
Когда функция 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');
}
});
});
Я думаю, в настоящее время вы дублировали 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
});