【问题标题】:Replacing body.onload in a user control替换用户控件中的 body.onload
【发布时间】:2010-10-10 08:56:39
【问题描述】:

我正在将使用<body onload="myJS();"> 的页面重构为用户控件。我知道我可以在加载时使用服务器端脚本注册来做到这一点。

如果我想在客户端 (ascx) 执行此操作,我将如何执行此操作?

【问题讨论】:

    标签: asp.net javascript


    【解决方案1】:

    取自http://snipplr.com/view/3116/cross-browser-add-event-listener/

    // Cross-browser implementation of element.addEventListener()
    
    function addEvent(evnt, elem, func) {
        if (elem.addEventListener) // W3C DOM
            elem.addEventListener(evnt,func,false);
        else if (elem.attachEvent) { // IE DOM
            var r = elem.attachEvent("on"+evnt, func);
    
        return r;
    }
    

    像这样使用它:addEvent(window, your_onload_handler)。或者你可以只使用 jquery 来做这个和很多其他的事情。

    【讨论】:

    • 能否详细说明?我们在哪里拨打addEvent(window, your_onload_handler) your_onload_handler 是指我们要在加载用户控件时调用的函数吗? addEvent 方法有三个参数,你怎么只传了两个?
    【解决方案2】:

    Romme 的客户端方法是最好的。但是以防万一有人想知道如何使用 ASCX 文件中的服务器端代码来执行此操作,请将其粘贴在模板的顶部:

    <script runat="server">
    
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        string strScript = "myJS();";
        Page.ClientScript.RegisterStartupScript(this.GetType(), "OnLoadScript_" + this.ClientID, strScript, true);
    }
    
    </script>
    

    【讨论】:

      【解决方案3】:

      OnLoad 通常是一种不好的初始化 JS 的方法,因为它只有在所有资源都完成加载(包括页面中的任何图像)时才会触发。

      页面 完成加载时调用要执行的 Javascript 的最简单、最可靠的方法是将内联 &lt;script&gt; 块放入 HTML 底部,就在关闭之前&lt;/body&gt;标签:

       <body>
         ... your page here ...
         <script>myJS();</script>
       </body>
      </html>
      

      【讨论】:

      • 你能解释一下为什么在所有资源都加载完之后再初始化JS不好吗?
      • 您通常希望将 JS 初始化推迟到页面加载完毕,因为您可能需要使用页面的 DOM。像图像这样的资源很可能不需要你的 JS 正确初始化,但如果你等待它们,开始初始化需要更长的时间,使页面看起来更慢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多