我想将此函数应用于由ajax加载的内容。事实是,该功能不适用于此类内容。是否有某种方法可以解决这个问题?
$(".liquidcam").each(function(index) {
if( (!this.width || !this.height) ) {
$(this).parent().parent().hide("fast");
}
$(this).error(function() {
$(this).parent().parent().hide("fast");
});
});
答案 0 :(得分:1)
我最近遇到了同样的问题。大多数插件需要通过在$(document).ready()
中调用它们来应用于元素,我想调用相同的函数,不仅仅是在加载文档之后的内容,还有那些通过Ajax调用到达的元素后来。
谷歌搜索了一段时间后,我发现了两种建议:
1.绑定到每个ajax调用的最终事件。
2.绑定到某个特定于元素的事件(例如focus()
)以运行您的代码。
在第一种情况下,你需要在你的ajax电话中注意它。 第二个并不适用于所有情况。
所以我的解决方案是从$(document).ready()
和$(document).ajaxSuccess()
调用相同的函数。在这种情况下,我需要防止同一个控件发生两次相同的操作。所以我使用了一个特殊的类,我正在申请所有访问过的元素。
function doOnReady() {
$(":input[data-autocomplete]").each(function () {
//Check wether allready visited
if (!$(this).hasClass('visited-by-on-ready')) {
//Do your staff
$(this).autocomplete({
source: $(this).attr("data-autocomplete"),
});
//mark as visited
$(this).addClass('visited-by-on-ready');
}
});
}
$(document).ready(doOnReady);
$(document).ajaxComplete(doOnReady);
答案 1 :(得分:1)
以achitaka-san所说的为基础,使用最新的jQuery,你可以做...
$(document).on('ready ajaxComplete', function() {
// ...attach your events/plugins here
});
如果您需要,我认为更清洁,更容易遵循/扩展。你需要注意创建循环(例如,如果你在'ready'处理程序中激活一些AJAX调用!)。