我最近在做一个很简单的网页,用的是C#。其中有一个功能是这样的,有三个文本框,textbox1和textbox2相应onchange事件去调用一个js function 把两个textbox的值相加显示在第三个textbox中。结果出现了个问题让我非常困扰,我的页面时在vs2005里做的,做完之后F5运行,没有问题。但是我把这个页面复制到我的iis下然后访问,结果页面不响应我的onchange事件,我查看HTML源代码发现,textbox1和textbox2的onchange事件都不见了。回到vs2005,F5,运行正常,查看HTML源代码,textbox1和textbox2的onchange事件也都在。同样是一个页面文件,同样是一台电脑,只是IIS一个是vs的一个是windows的,结果就不同。以下是我的代码:CS:
public string CTL;
protected void Page_Load(object sender, EventArgs e)
{
CTL = txbUploadFileDescription.UniqueID; //取得本页面里某个控件的UniqueID
CTL = CTL.Replace("txbUploadFileDescription", "");
CTL = CTL.Replace("$", "_") //取得本页面所有控件ID的前缀 txbClaimAmount.Attributes.Add("onchange", "Javascript:GetTotalAmount()");
txbClaimGST.Attributes.Add("onchange", "Javascript:GetTotalAmount()");
}ASPX
<script language="javascript" type="text/javascript">
function GetTotalAmount()
{
var CTL = "<%=CTL %>";
var txbClaimAmount = document.getElementById(CTL + "txbClaimAmount");
var txbClaimGST = document.getElementById(CTL + "txbClaimGST");
var txbClaimTotalAmount = document.getElementById(CTL + "txbClaimTotalAmount");
var Amount = 0;
var GST = 0;
var Total = 0;
if(isNaN(txbClaimAmount.value) == false)
{
if(txbClaimAmount.value > 0)
{
Amount = txbClaimAmount.value;
}
}
if(isNaN(txbClaimGST.value) == false)
{
if(txbClaimGST.value > 0)
{
GST = txbClaimGST.value;
}
}
Total = parseFloat(Amount) + parseFloat(GST);
txbClaimTotalAmount.value = Total.toFixed(2);
}
</script>HTML 源代码
F5运行:<input name="ctl00$ContentPlaceHolder1$txbClaimAmount" type="text" id="ctl00_ContentPlaceHolder1_txbClaimAmount" onchange="Javascript:GetTotalAmount()" />在IIS下运行: <input name="ctl00$ContentPlaceHolder1$txbClaimAmount" type="text" id="ctl00_ContentPlaceHolder1_txbClaimAmount" />其他都一样,包括javascript获得的CTL(UniqueID的前缀)。页面里还有其他的js,是用validator调用的,连个环境运行都正常。请指教,谢谢!
public string CTL;
protected void Page_Load(object sender, EventArgs e)
{
CTL = txbUploadFileDescription.UniqueID; //取得本页面里某个控件的UniqueID
CTL = CTL.Replace("txbUploadFileDescription", "");
CTL = CTL.Replace("$", "_") //取得本页面所有控件ID的前缀 txbClaimAmount.Attributes.Add("onchange", "Javascript:GetTotalAmount()");
txbClaimGST.Attributes.Add("onchange", "Javascript:GetTotalAmount()");
}ASPX
<script language="javascript" type="text/javascript">
function GetTotalAmount()
{
var CTL = "<%=CTL %>";
var txbClaimAmount = document.getElementById(CTL + "txbClaimAmount");
var txbClaimGST = document.getElementById(CTL + "txbClaimGST");
var txbClaimTotalAmount = document.getElementById(CTL + "txbClaimTotalAmount");
var Amount = 0;
var GST = 0;
var Total = 0;
if(isNaN(txbClaimAmount.value) == false)
{
if(txbClaimAmount.value > 0)
{
Amount = txbClaimAmount.value;
}
}
if(isNaN(txbClaimGST.value) == false)
{
if(txbClaimGST.value > 0)
{
GST = txbClaimGST.value;
}
}
Total = parseFloat(Amount) + parseFloat(GST);
txbClaimTotalAmount.value = Total.toFixed(2);
}
</script>HTML 源代码
F5运行:<input name="ctl00$ContentPlaceHolder1$txbClaimAmount" type="text" id="ctl00_ContentPlaceHolder1_txbClaimAmount" onchange="Javascript:GetTotalAmount()" />在IIS下运行: <input name="ctl00$ContentPlaceHolder1$txbClaimAmount" type="text" id="ctl00_ContentPlaceHolder1_txbClaimAmount" />其他都一样,包括javascript获得的CTL(UniqueID的前缀)。页面里还有其他的js,是用validator调用的,连个环境运行都正常。请指教,谢谢!
我的onchange是用aspx控件.Attributes.Add()方法添加的,这个不就是给渲染后的HTML控件添加事件吗?
我错了吗?谢谢指教。
运行环境不对,可能你IIS设置的ASP.NET 版本不对
<head runat="server">
<title>无标题页</title>
<script language="javascript" type="text/javascript">
function GetTotalAmount(textBox1, textBox2, textBox3)
{
document.getElementById(textBox3).value = parseFloat(document.getElementById(textBox1).value) + parseFloat(document.getElementById(textBox2).value);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
</html>MyContent.aspx<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="MyContent.aspx.cs" Inherits="MyContent" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
</asp:Content>MyContent.aspx.cspublic partial class MyContent : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Attributes.Add("onchange", "GetTotalAmount('" + TextBox1.ClientID + "','" + TextBox2.ClientID + "','" + TextBox3.ClientID + "')");
TextBox2.Attributes.Add("onchange", "GetTotalAmount('" + TextBox1.ClientID + "','" + TextBox2.ClientID + "','" + TextBox3.ClientID + "')");
}
}