从页面中删除所有javascript事件并将其放回
我想“暂停”页面的所有事件,这意味着删除所有事件集。。。然后能把它们放回去 即使第一部分=删除一个页面的所有事件,我也不知道怎么做!你有什么想法吗 提前谢谢你的帮助,我找不到任何有用的东西 编辑: 为什么??我想在已加载的页面中执行操作。用户将与页面交互,我希望控制交互。。。因此,请删除以前设置的所有交互。您可以使用从页面中删除所有javascript事件并将其放回,javascript,jquery,events,javascript-events,unbind,Javascript,Jquery,Events,Javascript Events,Unbind,我想“暂停”页面的所有事件,这意味着删除所有事件集。。。然后能把它们放回去 即使第一部分=删除一个页面的所有事件,我也不知道怎么做!你有什么想法吗 提前谢谢你的帮助,我找不到任何有用的东西 编辑: 为什么??我想在已加载的页面中执行操作。用户将与页面交互,我希望控制交互。。。因此,请删除以前设置的所有交互。您可以使用unbind()删除所有事件 $.unbind(); 我不知道你为什么要这么做。。。但是,您可以将所有javascript放入一个外部.js文件中(您应该已经这样做了)。然后在页面
unbind()
删除所有事件
$.unbind();
我不知道你为什么要这么做。。。但是,您可以将所有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');
}
}
var隐藏=假;
函数toggleScripts(){
如果(隐藏){
document.getElementById('toggle').setAttribute('src'/none.js');
}否则{
document.getElementById('toggle').setAttribute('src'/myExternalJS.js');
}
}
我想这会有用的。。。
}对于任何AJAX交互,您当然至少可以中止使用的任何连接,对于任何当前动画,您可以使用您需要将所有事件侦听器存储在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);
}
}
}
}
不必分离所有事件处理程序,您可以在所有事件处理程序中选中一个全局布尔变量
paused
var paused = false;
function handle_some_click(e) {
if (!paused) {
// do something
}
}
以下是我目前使用的解决方案:它不能完全解决问题! 我在捕获阶段停止事件:我在文档对象上放置了一个侦听器,以侦听捕获阶段中的所有事件并停止传播 +:
- 列表项
- 部分解决了这个问题
- 不适用于IE(无捕获阶段)
- 如果文档附加了其他事件,则会在我的侦听器之前触发
附言:如果我找到更好的解决方案,我会继续更新这篇文章。你为什么要这样做?可能有更好的解决方案。如果你想阻止用户触发任何事件,你可以在页面上放置一个元素,充当一个隐形斗篷…你可以在你想取消暂停时删除它…div不会阻止key events,在背景中切换链接div hack是我尝试过的一种方式,但我需要用户能够选择文本…当然,他不会首先使用div。你击败了我。添加一些jQuery,事情就会简单得多。没有静态方法来解除所有事件的绑定,
$.unbind()
会引发错误。这对元素有效,而不是对jQuery
本身静态有效。此外,不解除绑定只删除使用jQuery.bind添加的元素?是的,这对我不起作用。我在加载页面后对其进行操作。我在问题中添加了信息。这与AS3 RobotLegs方法类似,它们是awe一些!与前面相同,这段代码很有用,但在我的情况下不是:(事件已经存在。你认为错了…更改源代码不会“取消”javascript或删除事件处理程序。我说,我在一个已经加载的页面中操作,我没有访问所有eventListener的权限…感谢这个建议。
EventMap.pauseEvents();
var paused = false;
function handle_some_click(e) {
if (!paused) {
// do something
}
}