多个window.onload函数

时间:2013-01-27 13:25:15

标签: javascript javascript-events

我有一个名为start()的Javascript函数,它有多个函数可以使用window.onload函数加载。但是,我有以下功能,独立工作。但是,如果我在window.onload内写,那么它不起作用。

//START()     
window.onload = start;

function start()
{
    loadValues();
    showState4();
}

独立运作的代码。

window.onload=function(){
    document.getElementById("src2TargetAll").onclick = function() {
        sureTransfer(document.getElementById("net"), document.getElementById("target"), true);
    };
};

我尝试在window.onload中重写代码如下,但它不起作用。如何在单window.onload函数中重写以下代码。

window.onload = start;

function start()
{
    loadValues();  //loadValues() and showState4() works fine without sendValues().
    showState4();
    sendValuess();  // tested this sendValues without above two functions and that also works fine. but three functions in window.onload creates a problem
}


function sendValuess(){
    document.getElementById("src2TargetAll").onclick = function() {
        sureTransfer(document.getElementById("net"), document.getElementById("target"), true);
    };
};

sendValues()添加到window.onload后收到的错误如下:

STOP RUNNING THIS SCRIPT?
A SCRIPT ON THIS PAGE IS CAUSING YOUR WEB BROWSER TO RUN SLOWLY. IF IT CONTINUES TO RUN, YOUR COMPUTER MIGHT BECOME UNRESPONSIVE. 

下面是一个试图帮助我的人提出的loadValues和其他功能的代码:

function showState4(){
        var me = document.getElementById('stk1');
         var values = ''; //populate selected options
         for (var i=0; i<me.length; i++)
             if (me.options[i].selected)
                 values += me.options[i].value + ',';
         values = values.substring(0, values.length-1);
         var selected=[values];

         var temp= new Array();
            temp = values.split(",");

         var del = document.getElementById('StakeHolder');

         for(var i=0; i<del.length; i++)
           {
             for(var j=0;j<temp.length;j++)
              {  

                  if(temp[j] == del.options[i].value)
                    {

                       del.options[i].selected = true;
                    }
               }  
           }
         }

     function loadValues()
     {
    var  RD_REQ_RT_ID = "<%=RD_REQ_RT_ID %>";
    if(RD_REQ_RT_ID=="null")
     {
    document.getElementById('requestType').value="";
     }
     else{
    document.getElementById('requestType').value=RD_REQ_RT_ID;
    }
    )


_

     function sureTransfer(from, to, all) {
    if ( from.getElementsByTagName && to.appendChild ) {
        while ( getCount(from, !all) > 0 ) {
            transfer(from, to, all);
        }
    }
     }
     function getCount(target, isSelected) {
    var options = target.getElementsByTagName("option");
    if ( !isSelected ) {
        return options.length;
    }
    var count = 0;
    for ( i = 0; i < options.length; i++ ) {
        if ( isSelected && options[i].selected ) {
            count++;
        }
    }
    return count;
    }
    function transfer(from, to, all) {
    if ( from.getElementsByTagName && to.appendChild ) {
        var options = from.getElementsByTagName("option");
        for ( i = 0; i < options.length; i++ ) {
            if ( all ) {
                to.appendChild(options[i]);
            } else {
                if ( options[i].selected ) {
                    to.appendChild(options[i]);
                }
            }
        }
    }
     }

如何将windowVonuess()添加到window.onload而没有任何问题?

2 个答案:

答案 0 :(得分:1)

window.addEventListener will not work in IE so use window.attachEvent

You can do something like this

function fun1(){
    // do something
}

function fun2(){
    // do something
}


var addFunctionOnWindowLoad = function(callback){
      if(window.addEventListener){
          window.addEventListener('load',callback,false);
      }else{
          window.attachEvent('onload',callback);
      }
}

addFunctionOnWindowLoad(fun1);
addFunctionOnWindowLoad(fun2);

答案 1 :(得分:0)

错误:

STOP RUNNING THIS SCRIPT?
A SCRIPT ON THIS PAGE IS CAUSING YOUR WEB BROWSER TO RUN SLOWLY.
IF IT CONTINUES TO RUN, YOUR COMPUTER MIGHT BECOME UNRESPONSIVE.

IE在兼容模式下运行时发生。 (在使用FB和Google+时发生) 转到“工具”菜单,然后选择“兼容性视图设置”选项。这将打开一个窗口,您可以在其中关闭“使用兼容性视图显示所有网站”功能。