ページのすべてのイベントを「一時停止」したいのですが、これはすべてのイベントセットを削除することを意味します...そしてそれらを後で元に戻すことができます。
最初の部分=ページのすべてのイベントを削除しても、その方法がわかりません。アイデアはありますか?
うまくいくものが見つかりません!
編集:
なんで?すでに読み込まれているページで行動したい。ユーザーがページを操作し、操作を制御したいので、以前に設定したすべての操作を削除します。
ページのすべてのイベントを「一時停止」したいのですが、これはすべてのイベントセットを削除することを意味します...そしてそれらを後で元に戻すことができます。
最初の部分=ページのすべてのイベントを削除しても、その方法がわかりません。アイデアはありますか?
うまくいくものが見つかりません!
編集:
なんで?すでに読み込まれているページで行動したい。ユーザーがページを操作し、操作を制御したいので、以前に設定したすべての操作を削除します。
unbind()
すべてのイベントを削除するために使用できます
$.unbind();
すべてのイベントリスナーをeventMapに保存する必要があります。
EventMap = {
listeners:[],
paused:false,
mapListener:function(eventDispacter, eventType, eventHandler) {
listeners.push({eD:eventDispacter, eT:eventType, eH:eventHandler});
if(!paused)
eventDispacter.addEventListener(eventType, eventHandler);
},
unMapListener:function(eventDispacter, eventType, eventHandler) {
for( var i=0; i<listeners.length; i++) {
var listener = listeners[i];
if(listener.eD == eventDispacter && listener.eT == eventType && listener.eH == eventHandler) {
listeners.splice(listeners.indexOf(listener), 1);
eventDispacter.removeEventListener(eventType, eventHandler);
}
}
},
pauseEvents:function() {
if(!paused) {}
for( var i=0; i<listeners.length; i++) {
var listener = listeners[i];
listener.eD.removeEventHandler(listener.eT, listener.eH);
}
}
},
unPauseEvents:function() {
if(paused) {}
for( var i=0; i<listeners.length; i++) {
var listener = listeners[i];
listener.eD.addEventHandler(listener.eT, listener.eH);
}
}
}
}
でイベントを追加
<script>
function handleClick( e ) {
alert('Button Clicked');
}
EventMap.mapListener(document.getElementById('myButton'), 'click', handleClick);
</script>
でイベントを一時停止
EventMap.pauseEvents();
これが私が現在使用している解決策です:それは問題を完全に解決するわけではありません!
キャプチャフェーズ中にイベントを停止します。ドキュメントオブジェクトにリスナーを配置して、キャプチャフェーズのすべてのイベントをリッスンし、伝播を停止します。
+:
-:
より良い解決策はありますか?
PS:より良い解決策を見つけたら、この投稿を更新し続けます
AJAXインタラクションの場合、少なくともajaxキューを使用して接続を中止でき、現在のアニメーションの場合は、stop()を使用できます。
すべてのイベントハンドラーをデタッチする代わりに、すべてのイベントハンドラーでpaused
チェックされるグローバルブール変数を使用できます。
var paused = false;
function handle_some_click(e) {
if (!paused) {
// do something
}
}
なぜこれを行うのかわかりません...しかし、すべてのJavaScriptを外部の.jsファイルに入れることができます(すでに必要です。次に、ページにハードコードされた単一のJavaScript関数を使用します...このような:
<script type="text/javascript" id="toggle" src="/myExternalJS.js"></script>
<script type="text/javascript">
var hidden = false;
function toggleScripts() {
if(hidden) {
document.getElementById('toggle').setAttribute('src' '/none.js');
} else {
document.getElementById('toggle').setAttribute('src' '/myExternalJS.js');
}
}
これでうまくいくと思います...}