【问题标题】:Unbind events added by an external script loaded with jQuery's getScript function取消绑定由使用 jQuery 的 getScript 函数加载的外部脚本添加的事件
【发布时间】:2013-12-12 10:23:33
【问题描述】:

我正在使用 jQuery 的 $.getScript 函数加载一个外部脚本,其中有一些我无法理解的内容:

if (!!window.addEventListener){ // FF
    window.addEventListener('load', init, false);
} else if (!!window.attachEvent){ // IE
    window.attachEvent('onload', init);
} else {
    window.onclick = init;
}

有人能解释一下这是做什么的吗?

我不确定,但它添加了一些事件侦听器来检查页面是否已加载。

但由于我正在使用 $.getScript 函数加载脚本,因此我不再需要那些侦听器了。

有没有办法在 $.getScript 函数的回调中解除绑定?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    addEventListener 添加事件处理程序,attachEvent 对不支持 addEventListener 的浏览器执行相同操作,这只是较旧的 IE。

    您的条件检查哪个可用,并将事件处理程序附加到调用函数init() 的 window.onload 事件。
    如果没有可用的常规 onload 处理程序,它会在第一次单击窗口后回退到调用 init() 函数。

    要删除该功能,您必须在脚本加载后尝试执行相反的操作。

    你说你正在使用$.getScript,它有一个回调,所以类似于:

    $.getScript('myscript.js', function() {
        if (window.removeEventListener) {
            window.removeEventListener( 'load', init, false );
        }else if ( window.detachEvent ) {
            window.detachEvent( 'onload', init );
        }else{
            window.onclick = function() {};
        }
    });
    

    当然,如果您不再需要该事件处理程序,只需删除正在加载的脚本中的原始事件处理程序会更容易和更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多