【问题标题】:Fire function on loaded elements with particular class without events在没有事件的特定类的加载元素上触发函数
【发布时间】:2013-12-05 00:28:05
【问题描述】:

我正在使用数据属性和类名的组合来触发一个函数来修改具有特定类名的元素的内容。

下面的函数在 $(document).ready 处触发

$('.accessControlled').each(function(){
        var accessLevel = parseInt($(this).attr("data-accesslevel"));
        if((user.role !== 0) && (accessLevel !== role)){
            $(this).remove();
        } else {
            $(this).removeAttr('data-accesslevel');
            $(this).removeClass('accessControlled');
        }
    });

现在我想在 ajax 调用返回的元素上触发这个函数。 我知道我可以通过 jquery on()、live()、delegate() 等永久绑定函数,但是要使用哪个事件以及如何进行呢?

【问题讨论】:

  • 有多个 ajax 调用,这是应用程序的全局级别设置。因此,如果可能的话,我想找到一种方法,我不必在每次调用 ajax 后都调用该函数。

标签: javascript jquery


【解决方案1】:

只需针对返回的代码执行上面的代码:

例如:

function doit(obj){
    $(obj).each( // rest of your function
}

// ...

$.get(...).done(function(data){
    var obj = $(data);
    doit(obj);
    // rest of your injection
}

【讨论】:

  • 有多个 ajax 调用,这是应用程序的全局级别设置。因此,如果可能的话,我想找到一种方法,我不必在每次调用 ajax 后都调用该函数。
  • 您应该重新设计您的应用程序,因为这不是一个好方法。因此,您有两个解决方案:1)在 jQuery 的方法上注入一些回调,2)监控 DOM 更改:stackoverflow.com/questions/648996/… / stackoverflow.com/questions/5416822/… 但我建议您重写您的应用程序。
  • 找到了解决方案。 $(文档).ajaxSuccess();我可以调用上面的函数doit,所以我不必每次都单独调用它。
【解决方案2】:

试试这个:

// obviously user.role and role must be defined for this to work
function access(){
  $('.accessControlled').each(function(){
    var accessLevel = parseInt($(this).attr("data-accesslevel"));
    if((user.role !== 0) && (accessLevel !== role)){
      $(this).remove();
    }
    else{
      $(this).removeAttr('data-accesslevel');
      $(this).removeClass('accessControlled');
    }
  });
}

// assign each ajax call to a variable
var ajx1 = $.post({/*object stuff here*/});

// put the ajax variables in an Array
var ajxA = [ajx1, ajx2, ajx3, ajx4, ajx5, ajx6, ajx7];
$.each(ajxA, function(i, v){
  v.done(access);
});

【讨论】:

  • 有多个 ajax 调用,这是应用程序的全局级别设置。因此,如果可能的话,我想找到一种方法,我不必在每次调用 ajax 后都调用该函数...
【解决方案3】:

jQuery 中有一个函数 ajaxSuccess 可以用来在所有 ajax 调用之后做一些事情。

 $(document).ajaxSuccess(function() {
                accessControl.checkAccessControl();
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多