Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从页面中删除所有javascript事件并将其放回_Javascript_Jquery_Events_Javascript Events_Unbind - Fatal编程技术网

从页面中删除所有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
    }
}