0

我在 Gridview 中有一个文本框,并且有一个 javascript 函数在文本框键上工作,称为“ clearNoNum(obj)”来检查 isnumber,

我已经注册了一个文本框事件(服务器端)' TextBoxChanged',并且AutoPostBack=true

我的问题是:TextBoxChange如果在文本框上定义了 onkeyup javascript 函数,则不会触发服务器端事件。

以下是我的代码:

  <asp:TemplateField HeaderText="Number" ItemStyle-Width="100px" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <asp:TextBox ID="tbxNumber" AutoPostBack="true" onkeyup="clearNoNum(this)"    runat="server"
                    OnTextChanged="tbxNumber_TextChanged" Text='<%#Eval("Number")%>'></asp:TextBox>
            </ItemTemplate>

js函数:

 function clearNoNum(obj) {

    obj.value = obj.value.replace(/[^\d.]/g, "");

    obj.value = obj.value.replace(/^\./g, "");

    obj.value = obj.value.replace(/\.{2,}/g, ".");

    obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");

}

.cs 事件

    protected void tbxNumber_TextChanged(object sender, EventArgs e)
{
    TextBox tbxNumber = (TextBox)sender;
    GridViewRow gvr = (GridViewRow)tbxNumber.NamingContainer; 
    Label lblunitsPrice = ((Label)gvr.FindControl("lblunitsPrice"));
    Label lblTotalPrice = ((Label)gvr.FindControl("lblTotalPrice"));
    lblTotalPrice.Text = (int.Parse(lblunitsPrice.Text) * int.Parse(tbxNumber.Text)).ToString();
}
4

1 回答 1

0

当您在文本更改时触发事件(服务器)时,它会在用户每次释放密钥时执行页面生命周期,想想您给服务器带来了多少负担。

最好在文本框上触发事件 onblur。Josh 发布了一个信息性答案,您可以在这里找到:asp.net textbox 的 Lost Focus 方法?

于 2012-09-24T06:03:46.657 回答