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特定のイベントハンドラーへのポインターです。2つのイベントハンドラーはまったく同じですが、作成時に返される一意の識別子が異なるため、バインドされていないのは1つだけです。これは、タイマーへの参照を変数に格納し、後でその参照を使用してタイマーを再び無効にする方法と同じように機能するはずです。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をこの関数などとして宣言する方が効率的かもしれませんが、これは基本的に仕事をします。)

于 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ます。この場合はそれを削除します。nameSpaceOne

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

ここに例があります。

于 2012-10-29T17:22:56.400 に答える