我认为这是一个相对简单的问题。出于测试目的,我已经使它变得如此简单,以便找到问题。
我有一个与AJAX一起工作的jQuery脚本,可以在复选框旁边返回一些结果,如下所示:
$.ajax({
type:'GET',
url: '/customers/details/emails',
dataType:'json',
data: {
'customerID': $('select[name=payer_id]').val(),
'_token': $('input[name=_token]').val(),
},
success: function(data) {
$('.errorTitle').addClass('hidden');
$('.errorContent').addClass('hidden');
if ((data.errors)) {
setTimeout(function () {
$('#createOrigin').modal('show');
toastr.error('Check your inputs!', 'Error Alert', {timeOut: 5000});
}, 500);
if (data.errors.title) {
$('.errorTitle').removeClass('hidden');
$('.errorTitle').text(data.errors.title);
}
if (data.errors.content) {
$('.errorContent').removeClass('hidden');
$('.errorContent').text(data.errors.content);
}
} else {
$.each(data, function(i,val) {
$('<tr>').append(
$('<td>').html('<input type="checkbox" id="emailCheckboxSelect">'),
$('<td>').text(val)).appendTo('#customerEmails');
});
}
}
});
正如您可以看到的那样,对于每个结果,附加一个表格行,并带有一个ID为&#34的复选框; emailCheckboxSelect&#34;。
现在我的问题,这些显然是动态创建的元素,所以我相信这是这个脚本的问题(一个简单的假人只是为了找到问题)。这是应该工作的脚本:
$(function(){
$('#emailCheckboxSelect').click(function(){
alert('clicked');
});
});
这不适用于动态创建的元素。但是,我确实将<input type="checkbox" id="emailCheckboxSelect">Checkbox
直接添加到了我的页面,这确实会引发警报。
那么我做错了什么以及我需要做什么才能让jQuery识别动态创建的元素?
答案 0 :(得分:2)
尝试将$ .each(data,function(){})之后的click事件绑定到sucess:function(){}
您在DOM中使用具有相同ID的多个元素:元素ID在整个文档中应该是唯一的。
使用类
您的代码将如下所示:
$.ajax({
type: 'GET',
url: '/customers/details/emails',
dataType: 'json',
data: {
'customerID': $('select[name=payer_id]').val(),
'_token': $('input[name=_token]').val(),
},
success: function(data) {
$('.errorTitle').addClass('hidden');
$('.errorContent').addClass('hidden');
if ((data.errors)) {
setTimeout(function() {
$('#createOrigin').modal('show');
toastr.error('Check your inputs!', 'Error Alert', {
timeOut: 5000
});
}, 500);
if (data.errors.title) {
$('.errorTitle').removeClass('hidden');
$('.errorTitle').text(data.errors.title);
}
if (data.errors.content) {
$('.errorContent').removeClass('hidden');
$('.errorContent').text(data.errors.content);
}
} else {
$.each(data, function(i, val) {
$('<tr>').append(
$('<td>').html('<input type="checkbox" class="emailCheckboxSelect" />'),
$('<td>').text(val)).appendTo('#customerEmails');
});
$('.emailCheckboxSelect').click(function(e) {
alert('clicked');
});
}
}
});
答案 1 :(得分:1)
尝试将click
事件更改为
$('td').on('click', '.emailCheckboxSelect', function () {
alert('clicked');
});
这适用于动态创建的元素。另外,对动态创建的元素使用class而不是id。