使用javascript验证号码

时间:2011-08-07 18:59:33

标签: javascript asp.net

我在页面数量,价格和总数上有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()};");

但它没有进入这个功能,请让我知道我错过了什么......或者如果我使用了错误的事件......在过去的一天中尝试.... :(

2 个答案:

答案 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上,那么那些花括号可能会导致你的问题,但你的方法仍然没有被调用。您有效地将事件处理程序包装在对象文字中。

祝你好运。如果这不能解决您的问题,请提供更多信息,我会尝试提供其他想法。