`
ynduanlian
  • 浏览: 37220 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RegisterStartupScript(key, script) 等价于body.onload=f(){}里的内容?!

 
阅读更多

关于RegisterClientScriptBlock和RegisterStartupScript的区别,网上很多贴子是这么解释的:

这两个方法唯一的不同之处在于向“何处”注册脚本块。
         RegisterClientScriptBlock(key, script) 在 form开始处(紧接 <form runat="server"> 标识之后)发送脚本块      
         使用场景:               一般不使用DOM元素
         RegisterStartupScript(key, script) 在 form结尾处(在 </form> 标识之前)发送脚本块,在document装载完成后会执行,等价于body.onload=f(){}里的内容
         使用场景:               一般要使用DOM元素,比如:修改dom元素的值等
实验一下,我们发现:
RegisterClientScriptBlock(key, script) 在 form开始处(紧接 <form runat="server"> 标识之后)发送脚本块 
RegisterStartupScript(key, script) 在 form结尾处(在 </form> 标识之前)发送脚本块
这是这两个方法的区别。但问题是:
在 form结尾处(在 </form> 标识之前)发送脚本块,等价于body.onload=f(){}里的内容吗?显然不是啊!
比如,
如果我们的DOM对象放在<form></form>之后,在body.onload中的JS函数,仍然是可以访问的,但放在
RegisterStartupScript(key, script) 仍然无法访问!
 
 
 
比如下面的页面结构:
 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="1.aspx.cs" Inherits="rent._1" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function f() {
            alert(document.getElementById("spn1").innerText);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
    <spn id="spn1">Span Text</spn>
</body>
</html>

用下面的方法扫行f(),JS是无法取得DOM对象spn1的:

protected void Page_Load(object sender, EventArgs e)

        {

            RegisterStartupScript("scr_login", "<script type=\"text/javascript\">f();</script>");

        }

    }

 

 

所以,结论是:

RegisterStartupScript(key, script) 并不等价于body.onload=f(){}
 
 
关于RegisterClientScriptBlock和RegisterStartupScript的区别,只是前者被放在了<form>之后,
 
而后者放了在了</form>之前(能够访问form之前和form之中,但不能访问form之后的DOM对象),仅此而已!
 
 
最后,再讨论一个问题:脚本放在<body onload="f1();">,和放在HTML文档最后面有区别吗?
 
放在<body onload="f1();">中,要等到整个页面所有元素(包括所有图片)都加载完成之后才能执行,这时可以获取到页面上图片的尺寸。
放在HTML最后面,只要html文件加载并解析到最后就能执行,这时可以获取到页面上的元素,却不能获取到页面上图片的尺寸。
分享到:
评论

相关推荐

    ASP.NET程序中常用的三十三种代码.txt

     写在DataGrid的_ItemDataBound里 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=’#99cc00...

    DIV遮蔽背景显示层,背景为灰色并不可编辑

    很好用的一个功能,可以随意...Page.RegisterStartupScript("myscript", "&lt;script&gt;window.onload=function(){sAlert(' 帐号激活成功,系统奖励您" + MarkFromValue.value_1 + "积分!','Default.aspx');}&lt;/script&gt;");

    AJAX弹出框_利用ScriptManager.RegisterStartupScript

    根据提供的文件内容,我们可以总结和扩展出以下几个关键的知识点: ### 1. 使用 `ScriptManager.RegisterStartupScript` 实现 AJAX 弹出框 #### 概念理解 - **`ScriptManager.RegisterStartupScript`** 是 ASP.NET...

    ASP.NET常用代码

    写在DataGrid的_ItemDataBound里 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#99cc00';...

    javascript页面跳转常用代码.pdf

    在JavaScript中,页面跳转和刷新是常见的操作,主要应用于网页交互、用户导航以及数据更新等场景。下面将详细介绍这些方法和技巧。 首先,我们来看一下JavaScript刷新页面的几种方式: 1. `history.go(0)`:这个...

    页面加载中loading(js、asp.net)

    3. **Ajax请求**:如果页面使用Ajax异步加载内容,可以使用`XMLHttpRequest`或`fetch` API的`onreadystatechange`或`onload`事件来控制loading状态。 ```javascript fetch(url) .then(response =&gt; response.text()...

    基本c#代码

    if (this.txtDLM.Text.Trim() == "") { Page.ClientScript.RegisterStartupScript(this.GetType(), "info", "&lt;script&gt;alert('登录名不能为空!');&lt;/script&gt;"); return; } if (this.txtMM.Text.Trim() != this....

    C#使用MailMessage发送邮件

    ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "Sucess", "alert('邮件发送成功');", true); } ``` #### 关键点分析 1. **发件人与收件人的设置**: - 首先创建发件人邮箱地址,这里使用了 `...

    ScriptManager.RegisterStartupScript()方法在ajax页面无效的解决方法

    如果不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartupScript(Page.GetType(), “”, “[removed]window.open(‘default2.aspx’)[removed]”); 如果页面中使用了Ajax ,则上述代码即使...

    js弹出框几种形式

    this.RegisterStartupScript("hello", "&lt;script&gt;alert('Hello!');&lt;/script&gt;"); } ``` #### 6. 自定义消息显示类 为了更好地组织和复用代码,可以创建一个自定义类来管理各种类型的弹出框。例如,在`ShowMessage`...

    asp.net 文件夸域名传输带进度条

    &lt;script type="text/C#" runat="server"&gt; BinaryReader ms; UploadInfo uploadInfo = null; protected void Page_Load(object sender, EventArgs args) { if (this.IsPostBack) { uploadInfo = this....

    asp.net弹出对话框常用技巧

    public virtual void RegisterStartupScript(string key, string script); if (!this.IsStartupScriptRegistered("hello")) { this.RegisterStartupScript("hello", "&lt;script&gt;alert('Hello!');&lt;/script&gt;"); } ``` ...

    c#页面与javascript交互

    RegisterStartupScript("tempVar", "&lt;script&gt;var temp = '" + tmp + "';&lt;/script&gt;"); } } ``` 2. **步骤二**:在 JavaScript 中使用该变量。 ```javascript console.log(temp); // 输出 'someValue' ``` ##...

    ASP.NET(VS2008 C#)页面计时自动跳转(VS2008C#测试通过)

    ScriptManager.RegisterStartupScript(this, GetType(), "timer", "setTimeout('checkTime()', 30000);", true); } } public void checkTime() { string startTimeStr = Request.Form["hidStartTime"]; ...

    C# 焦点问题的设置

    这段代码使用`RegisterStartupScript`方法在客户端执行JavaScript,确保在页面加载完成后运行。 接下来,我们将讨论如何在用户按下回车键时切换焦点。在C# WinForms应用程序中,可以通过处理`KeyUp`事件来实现这一...

    科奥制冷网站

    public partial class Manages_... this.Page.RegisterStartupScript("ss", "&lt;script&gt;alert('验证码输入错误,请刷新页面!')&lt;/script&gt;"); } } protected void Button2_Click(object sender, EventArgs e) { } }

    .net后台弹出提示消息代码

    `RegisterClientScriptBlock`会在页面的`head`标签内插入脚本,而`RegisterStartupScript`则在`body`标签的底部插入,确保页面元素已加载。 例如: ```csharp Page.RegisterClientScriptBlock("tishi", "&lt;script ...

    c# asp.net webform web页面打印,可以控制需要打印和不需要打印的位置

    ClientScript.RegisterStartupScript(this.GetType(), "PrintScript", script, true); } ``` 最后,关于源码和工具,你可能需要一个能够处理复杂布局和样式的CSS库,如Bootstrap,它可以帮助你在打印时保持页面的...

Global site tag (gtag.js) - Google Analytics