textbox 的 onchange事件 不见了,请帮助。

xumiaodashui 2008-06-19 08:49:43
我最近在做一个很简单的网页,用的是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调用的,连个环境运行都正常。

请指教,谢谢!
...全文
278 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxxlsoft 2010-03-08
  • 打赏
  • 举报
回复
学习学习学习学习学习学习学习学习
xumiaodashui 2008-06-19
  • 打赏
  • 举报
回复
感谢amandag的回复

问题已经解决,我认为js放在masterpage里应该和放在content里是一样的,无论哪个先加载最终都是会写到html里。
amandag 2008-06-19
  • 打赏
  • 举报
回复
Master页面

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!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" 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.cs

public 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 + "')");
}
}
xumiaodashui 2008-06-19
  • 打赏
  • 举报
回复
问题已经解决,zkcq2004 正解。

感谢!

也感谢所有帮我解决问题的朋友。
belldandy11 2008-06-19
  • 打赏
  • 举报
回复
F5运行有,IIS没有?
运行环境不对,可能你IIS设置的ASP.NET 版本不对
zkcq2004 2008-06-19
  • 打赏
  • 举报
回复
你直接在IIS建个虚拟目录 把整个网站都弄个进去,试一下呢,为何偏要复制一个页面呢?
amandag 2008-06-19
  • 打赏
  • 举报
回复
楼主的写法有问题,看样子是在内容页写的
xumiaodashui 2008-06-19
  • 打赏
  • 举报
回复
的确,onchange事件是html控件的。
我的onchange是用aspx控件.Attributes.Add()方法添加的,这个不就是给渲染后的HTML控件添加事件吗?
我错了吗?

谢谢指教。
zkcq2004 2008-06-19
  • 打赏
  • 举报
回复
onchange事件貌似html控件才有

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧