Javascript 回发后文本框失去值

Javascript 回发后文本框失去值,javascript,asp.net,vb.net,devexpress,Javascript,Asp.net,Vb.net,Devexpress,我有一组文本框,允许用户自动计算总金额。计算正在进行,但当页面发回时,所有文本框值都消失了。任何帮助都将不胜感激!谢谢大家! 请看下面我的代码 JavaScript $(document).ready(function () { Number.prototype.formatMoney = function (c, d, t) { var n = this, c = isNaN(c = Math.abs(c)

我有一组文本框,允许用户自动计算总金额。计算正在进行,但当页面发回时,所有文本框值都消失了。任何帮助都将不胜感激!谢谢大家!

请看下面我的代码

JavaScript

$(document).ready(function () {
            Number.prototype.formatMoney = function (c, d, t) {
                var n = this,
                c = isNaN(c = Math.abs(c)) ? 2 : c,
                d = d == undefined ? "." : d,
                t = t == undefined ? "," : t,
                s = n < 0 ? "-" : "",
                i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
                j = (j = i.length) > 3 ? j % 3 : 0;
                return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
            };

        });

        $(document).ready(function () {
            $(this).keyup(function () {

                $("input[name='txtbx_less']").each(function (index) {
                    var txtbx_gross = $("input[name='ctl00$MainContent$txtbx_gross']").eq(index).val().replace(/,/g, "");
                    var txtbx_less = parseFloat(txtbx_gross) * 0.15;

                    if (!isNaN(txtbx_less)) {
                        $("input[name='ctl00$MainContent$txtbx_less']").eq(index).val(txtbx_less.formatMoney());
                    }

                });

                $("input[name='txtbx_net']").each(function (index) {
                    var txtbx_gross = $("input[name='txtbx_ctl00$MainContent$txtbx_grossgross']").eq(index).val().replace(/,/g, "");
                    var txtbx_less = $("input[name='ctl00$MainContent$txtbx_less']").eq(index).val().replace(/,/g, "");
                    var txtbx_net = parseFloat(txtbx_gross) - parseFloat(txtbx_less);

                    if (!isNaN(txtbx_net)) {
                        $("input[name='ctl00$MainContent$txtbx_net']").eq(index).val(txtbx_net.formatMoney());
                    }

                });

                $("input[name='ctl00$MainContent$txtbx_add']").each(function (index) {
                    var txtbx_net = $("input[name='ctl00$MainContent$txtbx_net']").eq(index).val().replace(/,/g, "");
                    var txtbx_add = parseFloat(txtbx_net) * 0.12;


                    if (!isNaN(txtbx_add)) {
                        $("input[name='ctl00$MainContent$txtbx_add']").eq(index).val(txtbx_add.formatMoney());

                    }

                });

                $("input[name='txtbx_billed']").each(function (index) {
                    var txtbx_net = $("input[name='txtbx_net']").eq(index).val().replace(/,/g, "");
                    var txtbx_add = $("input[name='txtbx_add']").eq(index).val().replace(/,/g, "");
                    var txtbx_billed = parseFloat(txtbx_net) + parseFloat(txtbx_add);

                    if (!isNaN(txtbx_billed)) {
                        $("input[name='txtbx_billed']").eq(index).val(txtbx_billed.toFixed(2));
                    }
                });


                $("input[name='txtbx_add1']").each(function (index) {
                    var txtbx_net1 = $("input[name='txtbx_net1']").eq(index).val().replace(/,/g, "");
                    var txtbx_add1 = parseFloat(txtbx_net1) * 0.12;


                    if (!isNaN(txtbx_add1)) {
                        $("input[name='txtbx_add1']").eq(index).val(txtbx_add1.formatMoney());
                    }

                });

                $("input[name='txtbx_billed1']").each(function (index) {
                    var txtbx_net1 = $("input[name='txtbx_net1']").eq(index).val().replace(/,/g, "");
                    var txtbx_add1 = $("input[name='txtbx_add1']").eq(index).val().replace(/,/g, "");
                    var txtbx_billed1 = parseFloat(txtbx_net1) + parseFloat(txtbx_add1);

                    if (!isNaN(txtbx_billed1)) {
                        $("input[name='txtbx_billed1']").eq(index).val(txtbx_billed1.formatMoney());
                    }
                });



            });


        }); 

您不需要在页面加载事件上设置控件名称/id属性。您可以使用该属性。请参见以下示例:

<dx:ASPxButton ...>
    <ClientSideEvents Click="function(s, e) {
        alert(txtDevExpress.GetText());
    }" />
</dx:ASPxButton>
<dx:ASPxTextBox ClientInstanceName="txtDevExpress">
</dx:ASPxTextBox>

参考这些:



您不需要在页面加载事件上设置控件名称/id属性。您可以使用该属性。请参见以下示例:

<dx:ASPxButton ...>
    <ClientSideEvents Click="function(s, e) {
        alert(txtDevExpress.GetText());
    }" />
</dx:ASPxButton>
<dx:ASPxTextBox ClientInstanceName="txtDevExpress">
</dx:ASPxTextBox>

参考这些:



对不起,我无法评论,所以只能通过回复回复。尼兰詹·卡拉所说的只是正确的

在devexpress控件中,我们无法使用ID从客户端获取/设置文本框或任何输入控件值。因此只有devexpress提供名为“ClientInstanceName”的属性。使用它,我们可以从客户端设置/获取输入控件的值

试着像下面这样

<dx:ASPxButton ...>
<ClientSideEvents Click="function(s, e) {
    alert(txtbx_gross.GetValue());
}" />
我们可以通过使用分隔符连接来传递所需的参数

.ASPx

<dx:ASPxComboBox runat="server" ID="FilterCombo" ClientInstanceName="FilterCombo" Width="70px" DropDownWidth="70px" ValueType="System.Int32"
                            OnCallback="FilterCombo_Callback"  DropDownStyle="DropDownList" SelectedIndex="0">
                            <Items>
                                <dx:ListEditItem Value="3" />
                                <dx:ListEditItem Value="20" />
                                <dx:ListEditItem Value="25" />
                                <dx:ListEditItem Value="50" />
                            </Items>
                            <ClientSideEvents SelectedIndexChanged="SelectedIndexChanged" />
                        </dx:ASPxComboBox>
解决方案2:使用ASPxCallBackPanel控件

与上面相同,但有一些不同,在回调面板中包含控件,并执行回调而不是回发。请参考以下链接

  • 解决方案3:如果您有问题,只需创建带有问题的示例应用程序,并将其与问题一起发布到Devexpress论坛(如果您拥有许可帐户)


    谢谢

    对不起,我无法评论,只有我通过回复回复。尼兰詹·卡拉所说的只是正确的

    在devexpress控件中,我们无法使用ID从客户端获取/设置文本框或任何输入控件值。因此只有devexpress提供名为“ClientInstanceName”的属性。使用它,我们可以从客户端设置/获取输入控件的值

    试着像下面这样

    <dx:ASPxButton ...>
    <ClientSideEvents Click="function(s, e) {
        alert(txtbx_gross.GetValue());
    }" />
    
    我们可以通过使用分隔符连接来传递所需的参数

    .ASPx

    <dx:ASPxComboBox runat="server" ID="FilterCombo" ClientInstanceName="FilterCombo" Width="70px" DropDownWidth="70px" ValueType="System.Int32"
                                OnCallback="FilterCombo_Callback"  DropDownStyle="DropDownList" SelectedIndex="0">
                                <Items>
                                    <dx:ListEditItem Value="3" />
                                    <dx:ListEditItem Value="20" />
                                    <dx:ListEditItem Value="25" />
                                    <dx:ListEditItem Value="50" />
                                </Items>
                                <ClientSideEvents SelectedIndexChanged="SelectedIndexChanged" />
                            </dx:ASPxComboBox>
    
    解决方案2:使用ASPxCallBackPanel控件

    与上面相同,但有一些不同,在回调面板中包含控件,并执行回调而不是回发。请参考以下链接

  • 解决方案3:如果您有问题,只需创建带有问题的示例应用程序,并将其与问题一起发布到Devexpress论坛(如果您拥有许可帐户)

    谢谢

    如中所述,
    ClientInstanceName
    属性应用于DevExpress控件的客户端事件

    但是,关于显示为
    ctl00$[placeholder\u name]$[control\u name]
    的控件ID命名,这是我从以下方面得到的解释:

    正如我们所讨论的,呈现id属性的ctl00部分 构成母版页的ID值,但您可能想知道 这个ID值是如何产生的。我们在报告中没有具体说明 母版或内容页。ASP.NET页中的大多数服务器控件都是 通过页面的声明性标记显式添加

    其他控件(如母版页本身)未在中定义 声明性标记。因此,它们的ID值必须是 自动为我们生成。ASP.NET引擎设置ID值 对于尚未显式设置ID的控件,在运行时。 它使用命名模式ctlXX,其中XX是一个连续的 增加整数值

    因此,由于您使用母版页的
    asp:Content
    占位符作为命名容器,因此母版页中的控件的
    id
    属性发生了更改,即使它是DevExpress控件

    为了防止这种行为,您需要定义Niranjan Kala在其帖子中提到的
    clientmode=“Static”
    ,但这次用于:

    正确的用法如下所示:

    <dx:ASPxTextBox ID="txtbx_add" runat="server" Width="170px" Theme="Material" ClientInstanceName="txtbx_add">
       <MaskSettings Mask="<0..99999g>.<00..99>" IncludeLiterals="DecimalSymbol" AllowMouseWheel="false" />
    </dx:ASPxTextBox>  
    
    
    
    注意:如果
    小数符号
    不起作用,您可以使用
    IncludeLiterals=“None”

    参考:

    如中所述,
    ClientInstanceName
    属性应用于DevExpress控件的客户端事件

    但是,关于显示为
    ctl00$[placeholder\u name]$[control\u name]
    的控件ID命名,这是我从以下方面得到的解释:

    正如我们所讨论的,呈现id属性的ctl00部分 构成母版页的ID值,但您可能想知道 这个ID值是如何产生的。我们在报告中没有具体说明 母版或内容页。ASP.NET页中的大多数服务器控件都是 通过页面的声明性标记显式添加

    其他控件(如母版页本身)未在中定义 声明性标记。因此,它们的ID值必须是 自动为我们生成。ASP.NET引擎设置ID值 对于尚未显式设置ID的控件,在运行时。 它使用命名模式ctlXX,其中XX是一个连续的 增加整数值

    因此,由于您使用母版页的
    asp:Content
    占位符作为命名容器,因此母版页中的控件的
    id
    属性发生了更改,即使它是DevExpress控件

    为了防止这种行为,您需要定义Niranjan Kala在其帖子中提到的
    clientmode=“Static”
    ,但这次用于:

    正确的用法如下所示:

    <dx:ASPxTextBox ID="txtbx_add" runat="server" Width="170px" Theme="Material" ClientInstanceName="txtbx_add">
       <MaskSettings Mask="<0..99999g>.<00..99>" IncludeLiterals="DecimalSymbol" AllowMouseWheel="false" />
    </dx:ASPxTextBox>  
    
    
    
    注意:如果
    小数符号
    不起作用,您可以使用
    IncludeLiterals=“None”

    参考:


    请突出显示加载页面内内容上的内容。它们都做什么?@Prabhat页面加载中的代码用于设置文本框名称。请突出显示页面加载中的内容。它们都做什么?@Prabhat页面加载中的代码用于设置
    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" 
        ClientIDMode="Static" %>
    
    <system.web>
        ...
        <pages clientIDMode="Static"></pages>
        ...
    </system.web>
    
    <%-- missing IncludeLiterals in MaskSettings --%>
    <dx:ASPxTextBox ID="txtbx_add" runat="server" Width="170px" Theme="Material" ClientInstanceName="txtbx_add">
       <MaskSettings Mask="<0..99999g>.<00..99>" AllowMouseWheel="false"/>
    </dx:ASPxTextBox>
    
    <dx:ASPxTextBox ID="txtbx_add" runat="server" Width="170px" Theme="Material" ClientInstanceName="txtbx_add">
       <MaskSettings Mask="<0..99999g>.<00..99>" IncludeLiterals="DecimalSymbol" AllowMouseWheel="false" />
    </dx:ASPxTextBox>