我使用.each函数来迭代元素的循环列表。我有一个匹配元素的初始列表,每个元素都非常有用。但是我可以通过Ajax方法添加新元素...每个元素都不能处理这个新添加的元素?
我知道活动事件和为新添加的元素重新绑定事件,但是.每个事件都不是事件,我无法找到任何关于如何正确地使用它来影响新添加的元素的帮助。
如何解决这个问题?
//Uploadify callback where I add new items
onComplete: function(event, queueID, fileObj, response, data)
{
$(".blank").remove();
$("#lib-contentWrap").append(response);
}
});
//And my each loop where I loop the elements. All elements are
wrapped inside the #lib-contentWrap div. And the looping begins
if I change the state of a checkbox (=checkbox check/uncheck)!
$('#chk-selected').change(function(){
if( $(this).is(':checked') ) {
$(".lib-item").each(function () {
if ( $(this).hasClass('item-selected') ) $(this).slideDown('fast');
});
}
else {
$(".lib-item").each(function () {
if ( $(this).hasClass('item-selected') ) $(this).slideUp('fast');
});
}
});
Thanks,
Primoz
发布于 2018-03-01 15:22:15
这是因为在.each()
运行时通过匹配元素的循环......当你调用它时,新元素不适合执行操作。解决方案:再次调用它,但只添加新元素。你需要.each()
在你的ajax结果上调用相同的结果,并将结果的上下文限制为每个结果。
例如,如果你有这个目前:
$(".myDiv").each(function() {
//stuff here
});
你需要在你的成功中调用相同的选择器和相同的代码(或者完成,不管你使用的是什么)ajax函数是这样的:
success: function(resp) {
$(".myDiv", resp).each(function() { //each, but only on the new guys
//stuff here (same as before)
});
//Do more stuff with your response...
}
这里的关键点在于, resp
,它告诉jQuery选择与之前相同的元素,但仅限于第二个参数的上下文中,在这种情况下:你的ajax响应包含需要爱的新元素。
首先,你可以在此缩短你的代码(可选不要求):
$('#chk-selected').change(function(){
if($(this).is(':checked')) {
$(".lib-item.item-selected").slideDown('fast');
}
else {
$(".lib-item.item-selected").slideUp('fast');
}
});
在回调中,触发相同的处理程序再次运行(这不会更改选择,只需触发处理程序即可运行):
onComplete: function(event, queueID, fileObj, response, data)
{
$(".blank").remove();
$("#lib-contentWrap").append(response);
$('#chk-selected', response).trigger('change');
}
https://stackoverflow.com/questions/-100007476
复制相似问题