簡體   English   中英

Javascript中是否有+ = for window.onload?

[英]Is there += for window.onload in Javascript?

最近我想出了以下問題:

在我所有html頁面的網站中,我在body onLoad事件中調用了一個函數:

<body onLoad="func1();">

這是我的html模板的一部分,因此它出現在我網站的每個頁面上,我無法改變它。 現在,交易是在某些頁面上,我需要調用一些其他函數onload,我嘗試使用window.onload屬性,但它擦除了func1的調用...

我現在可以說:

window.onload = func2(); //where func2() calls to func1()

但這看起來很臟又蹩腳? 不是嗎?

那么,有沒有辦法將一些函數添加到即將執行onload的那些函數而不刪除舊函數? 另外我使用asp.net,如果這可以幫助...

謝謝!

您可以使用jQuery鏈接加載處理程序。 反復使用jQuery.loadjQuery(document).ready將鏈接你的處理程序(我相信)。 您還可以選擇以編程方式執行此操作,這意味着您需要一個輔助函數來為您鏈接onload處理程序。 您可以使用閉包(或匿名函數)執行此操作:

var addOnLoadHandler = function(newHandler) {

    if (typeof window.onload != 'function') {
        window.onload = newHandler;
    }

    else {
        var oldHandler = window.onload;
        window.onload = function() {
            if (oldHandler) {
                oldHandler();
            }
            newHandler();
        };
    }
};

您必須以編程方式綁定您的函數,因此您必須這樣做:

addOnLoadHandlers(function() {
 alert("Hi I am the first onLoad handler!");
});

addOnLoadHandlers(function() {
 alert("Hi I am the second onLoad handler!");
});

在javascript文件中(或在您的html文件中)。

另一種方法是使用數組:

var onloaders = new Array();

function runOnLoads() {
    for (i = 0; i < onloaders.length; i++) {
        try {
            var handler = onloaders[i];
            handler();
        } catch(error) {
            alert(error.message);
        }
    }
}

function addLoader(obj) {
    onloaders[onloaders.length] = obj;
}

在您的HTML或Javascript文件中,您執行以下操作:

addLoader(function() {
 alert("Hi I am the first onLoad handler!");
});

addLoader(function() {
 alert("Hi I am the second onLoad handler!");
});

然后在你的html中你可以做<body onload="runOnLoads()">

您可能希望充分利用匿名函數:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

借鑒了有史以來十大自定義JavaScript功能

jQuery有一個很好的簡寫,用於向“ready”事件添加多個定義的處理程序(不能使用匿名函數,你必須使用$(document).ready(function(){});)。

只是

$(myFunction);
$(myFunction2);

一個很大的優點是,如果DOM已經加載,這仍然會被觸發,而事件之后綁定到window.onload的任何內容都不會被調用。

你有沒有考慮像jquery這樣的javascript庫,我知道還有其他的方法,但jquery會讓你的生活變得如此簡單......

$(function(){
   //Do stuff when DOM is loaded.
   func1();
    $('#link').click(function(){
        //bind a click event
    });
});

經典的方法是將所有功能都放在頁面底部:)

在jquery你可以做到

$(document).onload(function() {
  // do something
}

//然后再做

$(document).onload(function() {
  // do something here too!
}

jQuery將智能地將兩個事件添加到onload事件中,並且兩者都將在頁面加載時執行。 使用jQuery,您還可以獲得crossbrowser支持作為額外獎勵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM