我在页面数量,价格和总数上有3个文本框。当用户输入数量和价格时,使用javascript直接计算总数。 以下是代码:
function quantity(textvalue) {
var qty = textvalue.value;
var price = document.getElementById('<%=Price.ClientID %>').value;
var Total = Math.round(qty * price * 100) / 100;
document.getElementById('<%=Total.ClientID %>').value = Total;
}
function Price(textvalue) {
var price = textvalue.value;
var qty = document.getElementById('<%=Quantity.ClientID %>').value;
var Total = Math.round(qty * price * 100) / 100;
document.getElementById('<%=Total.ClientID %>').value = Total;
}
<asp:TextBox ID="Quantity" runat="server" onchange="javascript: quantity(this);" CausesValidation="True"></asp:TextBox>
<asp:TextBox ID="Price" runat="server" onchange="javascript: Price(this);" ></asp:TextBox>
<asp:TextBox ID="txtLineItemTotal" runat="server" Width="120px" MaxLength="14" ReadOnly="true"
BackColor="Silver" BorderWidth="2px" style="font-weight: 700">0.00</asp:TextBox>
我还需要验证在总文本框中计算的值,它不应超过100000000000.00。
我正在使用以下功能来实现此目的
function TotalChanged() {
var lineitemtotal = document.getElementById('<%=Total.ClientID %>').value;
alert("entered function");
if (lineitemtotal >= 100000000000.00) {
alert("Total cannot exceed 100000000000.00,please re-enter");
}
else
return false;
}
并在页面加载
Total.Attributes.Add("onchange", "{return TotalChanged()};");
但它没有进入这个功能,请让我知道我错过了什么......或者如果我使用了错误的事件......在过去的一天中尝试.... :(
答案 0 :(得分:2)
您不应该在onchange中使用javascript:
。
<asp:TextBox ID="Quantity" runat="server" onchange="javascript: quantity(this);" CausesValidation="True"></asp:TextBox>
将呈现为
<input type="text" id="Quality" name="Quality" onchange="javascript: quantity(this);"/>
西蒙
答案 1 :(得分:0)
对于初学者,如果您使用的是ASP.NET 4.0,则需要使用ScriptManager或ClientScriptManager的.RegisterExpandoAttribute方法,如下所示,使用ClientScriptManager:
Page.ClientScript.RegisterExpandoAttribute(controlId, attributeName, attributeValue, false);
最后一个布尔参数是“encode”参数。您必须将此设置为false。作为ASP.NET 4中一个令人惊讶的新功能,您的所有属性值都是HTML编码。非常适合安全性,但对于从服务器端发出的事件处理程序/脚本非常糟糕。
更新:
在您的具体情况下,RegisterExpandoAttribute将实现为:
Page.ClientScript.RegisterExpandoAttribute(Total.UniqueID, "onchange", "return TotalChanged();", false);
注意没有封装我的处理程序的花括号。如果你不在ASP.NET 4上,那么那些花括号可能会导致你的问题,但你的方法仍然没有被调用。您有效地将事件处理程序包装在对象文字中。
祝你好运。如果这不能解决您的问题,请提供更多信息,我会尝试提供其他想法。乙