1

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

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

我找不到任何有用的东西!

编辑:

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

4

6 回答 6

1

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

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

+:

  • 项目清单
  • 部分解决问题

-:

  • 不适用于 IE(无捕获阶段)
  • 如果文档上附加了其他事件,则会在我的侦听器之前触发。

你有更好的解决方案吗?

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

于 2010-11-22T16:39:23.867 回答
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();
于 2010-11-18T19:47:01.587 回答
1

您可以使用unbind()删除所有事件

$.unbind();
于 2010-11-18T19:38:14.360 回答
0

for any AJAX interactions you can certainly at least abort any connections using ajax queue and for any current animations, you can use stop();

于 2010-11-18T19:43:08.000 回答
0

您可以拥有一个全局布尔变量paused,而不是分离所有事件处理程序,该变量将在所有事件处理程序中进行检查。

var paused = false;

function handle_some_click(e) {
    if (!paused) {
        // do something
    }
}
于 2010-11-22T16:04:43.667 回答
-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');
    }
}

我认为这会工作......}

于 2010-11-18T19:39:43.690 回答