是否有可能触发班级变更事件的事件?

时间:2009-11-22 02:00:19

标签: jquery callback event-handling

我希望在HTML元素处理完某些其他无法控制的js进程后对其执行某些操作。

例如,给定 ......

和一些第三方异步应用程序执行$('div.x')。each(function(){/ * do stuff * /; this.addClass('processed');});

当其类更改为“已处理”时,是否存在一些在div中注册兴趣的策略?

4 个答案:

答案 0 :(得分:2)

这可能是一个坏主意,但我认为它比投票更好......

看一下未压缩的jQ lib,复制addClass,removeClass和attr的代码。

然后使用$ .fn.extend传递这些方法的新定义。你真的不会改变它们只是告诉他们在完成他们的事情之后调用this.trigger('classChange')。虽然在attr的情况下,你需要一个if语句告诉它只有在属性类是目标时才触发,或者如果键'class'在传入的哈希中。

然后你可以使用$(selector).bind('classChange',lambda);提供类更改所发生的操作。

当然,我从来没有试过超载核心方法,但我不明白为什么你不能。

可能看起来像这样。我从来没有看过内部,所以你可能无法将它包含在像ove doen这样的块中 - 你可能需要修改单个开关/如果情况或其他东西......

$.fn.extend({
  addClass: function(class){
    // standard jq logic
    this.trigger('changeClass');
    // standard return
  },
  removeClass: function(class){
    // standard jq logic
    this.trigger('changeClass');
    return this;
  },
  attr: function(prop, val){
    // standard jq logic

    if(typeof prop == 'object' && typeof prop.class != 'undefined'){
      this.trigger('changeClass');
    } else if(typeof prop == 'string' && typeof val !== 'undefined' && prop == 'class'){
      this.trigger('changeClass');
    }
    return this;
  }
}); 

答案 1 :(得分:0)

不是我所知道的,来自JQuery events系列。

你可能想要实现区间轮询检查,虽然听起来有点混乱:P

答案 2 :(得分:0)

没有简单的解决方案。 Similar question here

查看PPK's list of browser events以查看可用内容。

答案 3 :(得分:0)

试试这个,

(function($){

$.each(["addClass","removeClass"],function(i,methodname){
      var oldmethod = $.fn[methodname];
      $.fn[methodname] = function(){
            oldmethod.apply( this, arguments );
            this.trigger(methodname+"change");
            return this;
      }
});

})(jQuery);

开始使用:

$('#demo').bind('addClass removeClass',function(event){
      alert(event.type + " event triggered!");
});

获得解决方案

http://forum.jquery.com/topic/firing-an-event-on-addclass