取消绑定由加载了jQuery的getScript函数的外部脚本添加的事件

时间:2013-11-27 01:22:01

标签: javascript jquery

我正在使用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函数的回调中取消绑定它们?

1 个答案:

答案 0 :(得分:0)

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() {};
    }
});

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