Asp.net(C#) 如何在后台调用javascript 函数

// JScript 文件
function sAlert(txt,obj){
    //var eSrc=(document.all)?window.event.srcElement:arguments[1];
    var eSrc=obj;

    var shield = document.createElement("DIV");
    shield.id = "shield";
    shield.style.position = "absolute";
    shield.style.left = "0px";
    shield.style.top = "0px";
    shield.style.width = "100%";
    shield.style.height = document.body.scrollHeight+"px";
    shield.style.background = "#333";
    shield.style.textAlign = "center";
    shield.style.zIndex = "10000";
    shield.style.filter = "alpha(opacity=0)";
    shield.style.opacity = 0;
    var alertFram = document.createElement("DIV");
    alertFram.id="alertFram";
    alertFram.style.position = "absolute";
    alertFram.style.left = "50%";
    alertFram.style.top = "50%";
    alertFram.style.marginLeft = "-225px" ;
    alertFram.style.marginTop = -75+document.documentElement.scrollTop+"px";
    alertFram.style.width = "450px";
    alertFram.style.height = "150px";
    alertFram.style.background = "#ccc";
    alertFram.style.textAlign = "center";
    alertFram.style.lineHeight = "150px";
    alertFram.style.zIndex = "10001";
    strHtml = " <ul style=\"list-style:none;margin:0px;padding:0px;width:100%\">\n";
    strHtml += "    <li style=\"background:#DD828D;text-align:left;padding-left:20px;font-size:14px;font-weight:bold;height:25px;line-height:25px;border:1px solid #F9CADE;\">[系统提示] </li>\n";
    strHtml += "    <li style=\"background:#fff;text-align:center;font-size:12px;height:120px;line-height:120px;border-left:1px solid #F9CADE;border-right:1px solid #F9CADE;\">"+txt+" </li>\n";
    strHtml += "    <li style=\"background:#FDEEF4;text-align:center;font-weight:bold;height:25px;line-height:25px; border:1px solid #F9CADE;\"> <input type=\"button\" value=\"确 定\" id=\"do_OK\" onclick=\"doOk()\" /> </li>\n";
    strHtml += " </ul>\n";
    alertFram.innerHTML = strHtml;
    document.body.appendChild(alertFram);
    document.body.appendChild(shield);
    this.setOpacity = function(obj,opacity){
        if(opacity>=1)opacity=opacity/100;
        try{ obj.style.opacity=opacity; }catch(e){}
        try{
            if(obj.filters.length>0&&obj.filters("alpha")){
                obj.filters("alpha").opacity=opacity*100;
            }else{
                obj.style.filter="alpha(opacity=\""+(opacity*100)+"\")";
            }
        }catch(e){}
    }
    var c = 0;
    this.doAlpha = function(){
        if (++c > 20){clearInterval(ad);return 0;}
        setOpacity(shield,c);
    }
    var ad = setInterval("doAlpha()",1);
    this.doOk = function(){
    alertFram.style.display = "none";
    shield.style.display = "none";
        document.body.removeChild(alertFram);
        document.body.removeChild(shield);
        eSrc.focus();
        document.body.onselectstart = function(){return true;}
        document.body.oncontextmenu = function(){return true;}
    }
    document.getElementById("do_OK").focus();
    eSrc.blur();
    document.body.onselectstart = function(){return false;}
    document.body.oncontextmenu = function(){return false;}
}

apsx文件

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!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 language="JavaScript" src="divalert.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input type="button" value="点击这里" onclick="sAlert('渐变的',this);" />
        <asp:Button ID="Button1" runat="server" Text="Button"  OnClick="Button1_Click" />
        <asp:Literal ID="Literal1" runat="server"></asp:Literal></div>
    </form>
</body>
</html>

 

cs文件

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
       

        string js = @"var xxx = function (){
                      sAlert('渐变的',document.getElementById('" + Button1.ClientID + @"'))
                    }
                    if(document.all)
                    {
                        window.attachEvent('onload', xxx);
                    }
                    else
                    {
                        window.addEventListener('load', xxx , false);
                    }";
        ClientScript.RegisterStartupScript(GetType(), "js", js, true);

    }
  
}

 

解释

ClientScript.RegisterStartupScript
这个方法 是向前台输出一段代码,不是一定是js脚本的,只是现在都习惯用它输出js脚本
当指定它的第4个参数addScriptTags 为true时 会自动加上 <script> 开始和结束标记
ClientScript.RegisterStartupScript 这个方法输出的js脚本在 </form>之前

你一开始用的Literal.Text来输出js脚本 也是可以的,它的位置相对灵活一些,
Literal放在那里就在那里输出js脚本,但Literal 只能放在 <form runat="server"> </form>中间

也就是输出的js脚本都在 </form>之前 也等于在 </body>之前


Internet Explorer cannot open the Internet site http://localhost:1463/Divtest/Default.aspx.

Opertation aborted

这个错误就是
MSDN:子容器 HTML 元素包含试图修改子容器的父容器元素的脚本.
上面是MSDN 的说法,在你的代码里 就是在body 闭合之前 不能修改它的内容

之前 <input type="button" value="点击这里" onclick="sAlert('渐变的',this);" />
好用 是因为你在单击按钮的时候 页面已经加载完毕了。
可ClientScript.RegisterStartupScript 不好用是
脚本加载到 </form>之前  </body>还没有出现,这个时候你调用了sAlert 方法
也就是调用了

JScript code
document.body.appendChild(alertFram); document.body.appendChild(shield);


这在IE6,IE7中认为是不合法的,是错误的。 在IE8中是可以的。
所以出现了

Internet Explorer cannot open the Internet site http://localhost:1463/Divtest/Default.aspx.

Opertation aborted

解决办法 就是要不在 </body> 标记的后面加载js脚本,要不就是等页面加载之后运行sAlert 方法
所以就有了

window.attachEvent('onload', methodName);
这个形式 用于将sAlert 方法包装一下,在页面加载结束后运行

posted on 2009-05-25 16:18  J-Pei  阅读(1262)  评论(0编辑  收藏  举报

导航