0

次のようなドキュメントキープレスイベントを添付しています

$(document).live("keypress",myObject.onDocumentKeyPress);

そして私のハンドラの実装は

onDocumentKeyPress:function(e){
              if(e.keyCode == 13) { //Enter keycode
                    myobject.onColumnOptionClick(null,true);
             }
        }

今、この関数では を取得してe is not definedいます。

イベントオブジェクトをイベントハンドラーに渡すにはどうすればよいですか?

という提案を頂きました

$(document).live("keypress",function(e){
    myObject.onDocumentKeyPress(e);
});

ただし、この場合、その特定のハンドラーをアンバインドするのは難しいでしょう。

私に方法を提案してください。

4

2 に答える 2

4

これは問題ありません:

$(document).on("keypress",function(e){
    myObject.onDocumentKeyPress(e);
});

あなたは言った:しかし、この場合、その特定のハンドラーをバインド解除するのは難しいと思います。

バインドを解除するには、イベント ハンドラーをアタッチするときに名前空間を使用します。

$(document).on("keypress.something",function(e){
    myObject.onDocumentKeyPress(e);
});

これで、その名前空間でイベント ハンドラーをバインド解除できます。

$(document).off("keypress.something");
  • .live()はバージョン 1.7 で廃止され、バージョン 1.9 で削除されました。.on()代わりに使用してください。

参考文献:

  • .on()- jQuery API ドキュメント

@adeneoがコメントで述べたように、イベントは常に自動的に渡されます

$(function () {
    var o = {
        f: function (e) {
            alert(e.keyCode);
        }
    }

    $(document).on("keypress", o.f);
});

jsFiddle デモを確認できます。したがって、問題は他の場所にあり、エラーが発生しますe is not defined1.7+jQuery のバージョンを次の.on()メソッドに置き換えてみてください。

于 2013-06-12T05:45:02.543 に答える
2
var myobject = {
  onDocumentKeyPress: function (e) {
    console.log('Event ', e);
  }
};

$(document).live('keypress', myobject.onDocumentKeyPress);

これは、eイベント オブジェクトとして取得されます。

NOX が指摘したように、問題liveは削除された jQuery 1.9 を使用している可能性があります。に置き換えliveてみてくださいon

于 2013-06-12T05:58:02.953 に答える