将jquery函数应用于ajax内容

时间:2012-01-07 16:55:21

标签: jquery ajax

我想将此函数应用于由ajax加载的内容。事实是,该功能不适用于此类内容。是否有某种方法可以解决这个问题?

     $(".liquidcam").each(function(index) {
          if( (!this.width || !this.height) ) {

         $(this).parent().parent().hide("fast");
        }

        $(this).error(function() {

         $(this).parent().parent().hide("fast");
        });



  });

2 个答案:

答案 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调用!)。