Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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 是否添加到window.onload事件?_Javascript_Jquery - Fatal编程技术网

Javascript 是否添加到window.onload事件?

Javascript 是否添加到window.onload事件?,javascript,jquery,Javascript,Jquery,我想知道在window.onload事件完成后如何向其添加另一个方法调用 已分配方法调用 假设脚本中的某个地方我有这个任务 window.onload = function(){ some_methods_1() }; 后来在剧本里我有了这个任务 window.onload = function(){ some_methods_2() }; 目前,只调用某些方法\u 2。是否有任何方法可以添加到上一个窗口。onload回调而不取消某些方法\u 1?(也不包括在同一功能块中的某些方法\u

我想知道在window.onload事件完成后如何向其添加另一个方法调用 已分配方法调用

假设脚本中的某个地方我有这个任务

 window.onload = function(){ some_methods_1() };
后来在剧本里我有了这个任务

 window.onload = function(){ some_methods_2() };
目前,只调用
某些方法\u 2
。是否有任何方法可以添加到上一个
窗口。onload
回调而不取消
某些方法\u 1
?(也不包括在同一功能块中的
某些方法\u 1()
某些方法\u 2()

我想这个问题不是关于window.onload的,而是关于javascript的。我不想将某些内容分配给
window.onload
,如果其他开发人员处理脚本并添加一段同样使用
window.onload的代码(不查看我以前的代码),他会禁用我的onload事件

我也在想同样的事情

  $(document).ready()
在jquery中。 如何在不破坏之前或之后的内容的情况下向其添加内容?

您可以使用attachEvent(ie8)和addEventListener

addEvent(window, 'load', function(){ some_methods_1() });
addEvent(window, 'load', function(){ some_methods_2() });

function addEvent(element, eventName, fn) {
    if (element.addEventListener)
        element.addEventListener(eventName, fn, false);
    else if (element.attachEvent)
        element.attachEvent('on' + eventName, fn);
}

基本上有两种方法

  • 存储
    窗口的上一个值。onload
    以便代码可以调用上一个处理程序(如果在代码执行之前或之后出现)

  • 使用
    addEventListener
    方法(这当然是Microsoft不喜欢的,并且要求您使用另一个不同的名称)

  • 如果另一个脚本想要使用
    window.onload
    ,并且不考虑协作,那么第二种方法将给您带来更大的安全性,但是Javascript的主要假设是所有脚本都会像您尝试的那样协作


    请注意,一个不适合与其他未知脚本一起使用的坏脚本总是能够破坏页面,例如,弄乱原型、污染全局名称空间或破坏dom。

    如果使用jQuery,则不必做任何特殊操作。通过
    $(document).ready()添加的处理程序不会相互覆盖,而是依次执行:

    $(document).ready(func1)
    ...
    $(document).ready(func2)
    


    如果您不使用jQuery,您可以使用,正如Karaxuna所演示的那样,对于IE来说,这可能不是一个流行的选项,但有时脚本最终会分布在不同的块中,在这种情况下,我发现这是一个快速修复方法

    if(window.onload != null){var f1 = window.onload;}
    window.onload=function(){
        //do something
    
        if(f1!=null){f1();}
    }
    
    然后在别的地方

    if(window.onload != null){var f2 = window.onload;}
    window.onload=function(){
        //do something else
    
        if(f2!=null){f2();}
    }
    

    这将根据需要更新onload函数和链

    $(document).ready()
    累加。如果jQuery在手,就使用它。所以为了使它跨浏览器兼容,我应该同时使用这两种语言?另外,如果稍后在脚本中,我在先前使用addEventListener之后将回调附加到window.onload,那么我分配给addEventListener的任何内容是否都会被取消?这太棒了!那么jquery的$(document).ready()或bind()呢?你知道jquery只是Javascript吗?我没有检查,但我猜测它可能使用(2)(如果可用)或(1)用于较旧的浏览器。当然,我只是问,因为$(document).ready()与window.onload()有点不同……”ready事件发生在HTML文档加载之后,而onload事件发生在所有内容(例如图像)加载之后你是说“document.attachEvent('onload'…)”,而不是“load”。)您不应该使用document.addEventListener(“加载”)(在我的firefox版本中不起作用),而应该使用window.addEventListener(“加载”)。请参阅@JeremySalwen找到了更好的来源:。更正。
    window.onload=(function(oldLoad){
      return function(){
        oldLoad && oldLoad();
        func1();
      }
    })(window.onload)
    ...
    window.onload=(function(oldLoad){
      return function(){
        oldLoad && oldLoad();
        func2();
      }
    })(window.onload)
    
    if(window.onload != null){var f1 = window.onload;}
    window.onload=function(){
        //do something
    
        if(f1!=null){f1();}
    }
    
    if(window.onload != null){var f2 = window.onload;}
    window.onload=function(){
        //do something else
    
        if(f2!=null){f2();}
    }