これは、jQuery を使用して JavaScript でオブジェクトのメソッドに適切にバインドおよびイベントする方法ですか?
サンプルコードを少し用意したのですが、気になるのはコメント「is this ok?」の後の2行です。
もちろん、コールバックはオブジェクトのメソッドであるため、コンテキストが同じままである必要があります。
function MyPrototype(id) {
this.id = id;
this.sel = '#' + id;
// *** IS THIS OK? ***
$(this.sel).on('click', function(evt) {
MyPrototype.prototype.mouseClick.call(this, evt); });
}
MyPrototype.prototype.mouseClick = function (evt) {
// I want to use evt to get info about the event
// I want use this to access properties and methods of the instance
alert(this.id + ' was clicked');
}
myObject1 = new MyPrototype('myDiv1');
myObject2 = new MyPrototype('myDiv2');
また、特定の関数からイベントをバインド解除する必要が生じる場合があります。
しかし、以下は機能していません...
MyPrototype.prototype.unbindClick = function() {
$(this.sel).off('click', function(evt) {
MyPrototype.prototype.mouseClick.call(this, evt); });
}
myObject2.unbindClick();
イベント ハンドラーとしてインライン関数を渡していることに注意してください。