首頁  >  問答  >  主體

增加多個window.onload事件

<p>在我的ASP.NET使用者控制項中,我正在為<code>window.onload</code>事件新增一些JavaScript程式碼:</p> <pre class="brush:php;toolbar:false;">if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName)) Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, "window.onload = function() {myFunction();};", true);</pre> <p>我的問題是,如果<code>onload</code>事件中已經有內容,那麼這段程式碼就會覆蓋它。我該如何讓兩個使用者控制項都能在<code>onload</code>事件中執行JavaScript程式碼? </p> <p><strong>編輯:</strong>謝謝關於第三方函式庫的資訊。我會記住的。 </p>
P粉555696738P粉555696738397 天前390

全部回覆(2)我來回復

  • P粉354602955

    P粉3546029552023-08-23 14:45:25

    仍然有一個醜陋的解決方案(遠不如使用框架或addEventListener/attachEvent)是保存目前的onload事件:

    function addOnLoad(fn)
    { 
       var old = window.onload;
       window.onload = function()
       {
           old();
           fn();
       };
    }
    
    addOnLoad(function()
    {
       // 在这里编写你的代码
    });
    addOnLoad(function()
    {
       // 在这里编写你的代码
    });
    addOnLoad(function()
    {
       // 在这里编写你的代码
    });

    請注意,像jQuery這樣的框架將提供一種在DOM準備好時執行程式碼的方法,而不是在頁面載入時執行。

    DOM準備好意味著你的HTML已經載入完成,但是外部元件(如圖片或樣式表)尚未載入完成,這使得你可以在載入事件觸發之前被呼叫。

    回覆
    0
  • P粉253518620

    P粉2535186202023-08-23 10:50:31

    大部分提出的「解決方案」都是針對Microsoft的,或是需要龐大的函式庫。這是一個好的方法。它適用於符合W3C標準的瀏覽器和Microsoft IE。

    if (window.addEventListener) // W3C标准
    {
      window.addEventListener('load', myFunction, false); // 注意 **不是** 'onload'
    } 
    else if (window.attachEvent) // Microsoft
    {
      window.attachEvent('onload', myFunction);
    }

    回覆
    0
  • 取消回覆