1

我需要的是这样的:

var MyEventPointer = $('body').on('MyCustomEvent','.myClass',function(e){
   // do something
});

var MyEventPointer2 = $('body').on('MyCustomEvent','.myClass',function(e){
   // do something
});

$('body').unbindByEventID(MyEventPointer);

MyEventPointer是指向特定事件处理程序的指针。尽管这两个事件处理程序完全相同,但只有一个是未绑定的,因为它们具有不同的唯一标识符,在创建时返回。这应该像我可以在变量中存储对计时器的引用并稍后使用它的引用再次禁用计时器的方式一样工作。我知道 Jquery 存储事件的唯一 ID,但我不知道我是否可以找到它们。这可能与 Jquery 相关还是我需要扮演自己的解决方案?需要委托该事件,以便包括当前和未来的实例.myClass

更新:

示例代码:

<tr><td><input class="MyWidget" /></td></tr>
<tr><td><input class="MyWidget" /></td></tr>
<tr><td><input class="MyWidget" /></td></tr>
<!-- Repeats n times, rows are added and deleted dynamically -->    

JavaScript:

// Creation
$('.MyWidget').MyWidget();


// The plugin
$.fn.MyWidget = function (options) {
   return this.each(function () {
      new ATK.MyWidget(this, options);
   });
};

// The widget class
ATK.MyWidget = function (element, options) {
   // constructor
}
ATK.MyWidget.prototype = new ATK.ParentWidget();

ATK.MyWidget.prototype.SetFilterEvent = function(Selector) {
   var base = this;   
   $('body').on('MyCustomEvent',Selector,function(e){base.eMyCustomEvent(e,this)});
}

ATK.MyWidget.prototype.eMyCustomEvent = function(e,eventThis) {
   console.log(this.protected.$element.attr('id')+' has detected that '+$(eventThis).attr('id')+' has changed.');
}
4

2 回答 2

2

你可以这样做:

function MyEventPointer1(e){
   // do something
});

function MyEventPointer2(e){
   // do something
});

$('body').on('MyCustomEvent','.myClass', MyEventPointer1);
$('body').on('MyCustomEvent','.myClass', MyEventPointer2);

$('body').off('MyCustomEvent','.myClass', MyEventPointer1);

更具体地说,在您使用类的情况下,您可以轻松应用上述模式并且它可以工作:

ATK.MyWidget.prototype.SetFilterEvent = function(Selector) {
    this.event = function(e) {this.eMyCustomEvent(e, this);}
    $('body').on('MyCustomEvent',Selector,this.event);
}

ATK.MyWidget.prototype.RemoveFilterEvent = function(Selector) {
    $('body').off('MyCustomEvent',Selector,this.event);
}

(您可能需要检查以确保 this.event 不为 null 并在构造函数中将其设置为 null,或者在构造函数中将 this.event 声明为 this 函数或类似的东西可能更有效,但是这基本上可以完成工作。)

于 2012-10-29T16:43:54.313 回答
0

如果你想在一个元素上使用不同的相同事件,我的意思是如果你想在同一个元素上注册多个事件处理程序,那么你可以使用event namespace,即

$('body').on('MyCustomEvent.nameSpaceOne','.myClass',function(e){
    // do something
});

$('body').on('MyCustomEvent.nameSpaceTwo','.myClass',function(e){
    // do something
});

event namespace使用and 在这种情况下删除第一个处理程序;snameSpaceOne

$('body').off('MyCustomEvent.nameSpaceOne', '.myClass'); 

一个例子在这里

于 2012-10-29T17:22:56.400 回答