あなたがやりたいことは次のようなものだと思います(JQuery 1.7.2の例):
$("#a").hover(function(){alert("test")});
$("#a")[0].active=true;
$("#b").click(function(){
if($("#a")[0].active){
$("#a")[0].storedEvents = [];
var hoverEvents = $("#a").data("events").mouseover;
jQuery.each(hoverEvents , function(key,handlerObj) {
$("#a")[0].storedEvents.push(handlerObj.handler);
});
$("#a").off('hover');
}else{
for(var i=0;i<$("#a")[0].storedEvents.length;i++){
$("#a").hover($("#a")[0].storedEvents[i]);
}
}
$("#a")[0].active = ($("#a")[0].active)==false;
});
JSFiddleの例
ただし、考慮しなければならないことがいくつかあります。
- これは、JQueryを使用してイベントを追加した場合にのみ機能します。これは、JQueryが追加されたイベントハンドラーの内部追跡を保持するためです。
- JQueryのバージョンごとに処理が
data("events")
異なります。つまり、このコードは他のバージョンのJQueryでは機能しない可能性があります。
これがお役に立てば幸いです。
編集:
data("events")
JQuery1.6およびJQUery1.7で使用されていた、文書化されていない内部データ構造でしたが、JQuery1.8では削除されました。したがって、JQuery 1.8では、イベントデータにアクセスする唯一の方法は次の方法です$._data(element, "events")
。ただし、JQueryドキュメントからのアドバイスに注意してください。これはサポートされているパブリックインターフェイスではありません。実際のデータ構造は、バージョンごとに互換性がないように変更される可能性があります。