从页面中删除所有javascript事件并将其放回原处

时间:2010-11-18 19:19:12

标签: javascript jquery events javascript-events unbind

我想“暂停”页面的所有事件,这意味着删除所有事件集......并且能够在之后将它们放回去。

即使是第一部分=删除页面的所有事件,我也看不到怎么做!你有想法吗?

在此先感谢您的帮助,我找不到任何有效的方法!

编辑:

为什么呢?我想在已加载的页面中执行操作。用户将与页面进行交互,我想控制交互......所以删除之前设置的所有交互。

6 个答案:

答案 0 :(得分:1)

您可以使用unbind()删除所有活动

$.unbind();

答案 1 :(得分:1)

您需要将所有事件侦听器存储在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();

答案 2 :(得分:1)

以下是我目前使用的解决方案:它不能完全解决问题!

我在捕获阶段停止事件:我在文档对象上放置一个监听器来监听捕获阶段中的所有事件并停止传播。

+:

  • 列表项
  • 部分解决问题

- :

  • 不适用于IE(无捕获阶段)
  • 如果文档中附有其他事件,则会在我的听众之前解雇。

你有更好的解决方案吗?

P.S。:如果我找到更好的解决方案,我会继续更新这篇文章

答案 3 :(得分:0)

对于任何AJAX交互,您当然至少可以使用ajax queue中止任何连接,对于任何当前动画,您都可以使用stop();

答案 4 :(得分:0)

不是分离所有事件处理程序,而是可以在所有事件处理程序中检查全局布尔变量paused

var paused = false;

function handle_some_click(e) {
    if (!paused) {
        // do something
    }
}

答案 5 :(得分:-1)

我不确定你为什么要这样做...但是你可以把所有的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');
    }
}

我认为这会奏效...... }

相关问题