javascript运行总计添加错误

javascript运行总计添加错误,javascript,asp.net,asp.net-mvc-3,Javascript,Asp.net,Asp.net Mvc 3,大家好,我正在尝试使用javascript进行一个非常简单的计算,以找到一个运行总数。我好像错过了什么。我确实仔细查看了一下,发现了一些非常类似的场景,但是,我似乎无法理解我自己的代码 这是我用来计算跑步总量的脚本 var total = 0; function GetTotal(txtBox) { total += parseInt(txtBox.value) || 0; $("#chkTotal").html(total); } 以

大家好,我正在尝试使用javascript进行一个非常简单的计算,以找到一个运行总数。我好像错过了什么。我确实仔细查看了一下,发现了一些非常类似的场景,但是,我似乎无法理解我自己的代码

这是我用来计算跑步总量的脚本

    var total = 0;

    function GetTotal(txtBox) {
        total += parseInt(txtBox.value) || 0;
        $("#chkTotal").html(total);
    }
以下是我认为的一些代码:

 <div class="editor-field">
        @Html.TextBox("FirstDemo", String.Empty, new { id = "firstdemo", onchange =     "GetTotal(this)" })
        @Html.ValidationMessageFor(model => model.FirstDemo)
    </div>


<div>
        <h3>Total Checked</h3>
    </div>
    <div id="chkTotal"></div>

@TextBox(“FirstDemo”,String.Empty,new{id=“FirstDemo”,onchange=“GetTotal(this)”})
@Html.ValidationMessageFor(model=>model.FirstDemo)
总检查
在文本框中的值被更改之前,总计的计算是完美的,在这种情况下,文本框中输入的任何内容都会再次添加到运行总计中


有人能帮我吗?

最简单的解决方案,循环所有表单元素并重新计算

我在代码中看到了jQuery,因此它是一个基本选择器,用于获取元素和each循环

function GetTotal(txtBox) {
    var total = 0;
    $(".calculationClass").each(
        function() {
            total += parseInt(this.value,10) || 0;
        }
    );
    $("#chkTotal").html(total);
}

最简单的解决方案,遍历所有表单元素并重新计算

我在代码中看到了jQuery,因此它是一个基本选择器,用于获取元素和each循环

function GetTotal(txtBox) {
    var total = 0;
    $(".calculationClass").each(
        function() {
            total += parseInt(this.value,10) || 0;
        }
    );
    $("#chkTotal").html(total);
}

问题在于
total
变量的全局范围:我想您的表单中有几个文本字段,您可以在其中设置它们,以同样的方式处理
onchage
事件。第一次输入某个值时,该值会正确地添加到“总计”中,但当您在任何文本字段中更改某个值时,它会再次添加新值。同样,因为
total
具有全局范围

您应该在函数中本地移动
total
,并重新解析您感兴趣的输入元素中的所有值

由于您使用的是jquery,因此可以执行以下操作:

function GetTotal(txtBox) {
    var total = 0;
    $('input:text').each(function(index, value) {
        total += parseInt($(value).val() || 0);
    });

    $("#chkTotal").html(total);
}​

这里有一个例子可以向您演示。

问题在于
total
变量的全局范围:我假设您有几个文本字段,您可以将它们设置为以相同的方式处理
onchage
事件。第一次输入某个值时,该值会正确地添加到“总计”中,但当您在任何文本字段中更改某个值时,它会再次添加新值。同样,因为
total
具有全局范围

您应该在函数中本地移动
total
,并重新解析您感兴趣的输入元素中的所有值

由于您使用的是jquery,因此可以执行以下操作:

function GetTotal(txtBox) {
    var total = 0;
    $('input:text').each(function(index, value) {
        total += parseInt($(value).val() || 0);
    });

    $("#chkTotal").html(total);
}​


这里有一个示例供您演示。

您需要减去之前的值(这意味着您必须跟踪它),或者您必须迭代所有字段,并在每次其中一个字段更改时求和(更常见的方法)。您应该在
parseInt
调用中包含
radix
参数:
parseInt(txtBox.value,10)
根据您发布的javascript,每当文本框中的值发生变化时,它都会被添加到运行总数中。这不是您想要的吗?我对编程非常陌生,所以您可以向我展示的任何东西都很好,但是@ElenaDBA,理想情况下,我希望文本框的值仅根据其当前值添加到运行总数中值。一旦文本框中的值发生更改,我需要总数与所有文本框总和的当前值相匹配。因此,仅当文本框值基于所有文本框的值发生更改时,而不是当用户更改其值时,才要修改运行总数?我理解正确吗?您需要减去之前的值值(这意味着您必须跟踪它),或者您必须迭代所有字段,并在每次其中一个字段更改时求和(更常见的方法)。您应该在
parseInt
调用中包含
radix
参数:
parseInt(txtBox.value,10)
根据您发布的javascript,每当文本框中的值发生变化时,它都会被添加到运行总数中。这不是您想要的吗?我对编程非常陌生,所以您可以向我展示的任何东西都很好,但是@ElenaDBA,理想情况下,我希望文本框的值仅根据其当前值添加到运行总数中值。一旦文本框中的值发生更改,我需要总数与所有文本框总和的当前值相匹配。因此,仅当文本框值基于所有文本框的值发生更改时,而不是当用户更改其值时,才要修改运行总数?我理解正确吗?我尝试在函数内部移动总数离子,但我不是正数,我做得对。当我做总数时,只取所有文本中最高整数的值boxes@BenjaminRandal发布了一个完整的JSFIDLE示例。请查看。哇,这太棒了,JSFIDLE也很不错。您的解决方案非常有效。我遇到的唯一问题是我有两个运行总数在这个特定的视图中…它们似乎与此解决方案相冲突,是否有办法将两个函数(GetTotal/GetTotal2)分离以与正确的编辑器字段/文本框相关联?现在一切都好了:)我尝试在函数内部移动总数,但我不确定我做得对。当我这样做的时候,总数只取所有文本中最高整数的值boxes@BenjaminRandal发布了一个完整的JSFIDLE示例。看看。哇,这真是太棒了,JSFIDLE也很整洁。您的解决方案非常有效。我遇到的唯一问题是,我在这个特定视图上有两个运行总计。。。它们似乎与此解决方案相冲突,是否有办法将这两个函数(GetTotal/GetTotal2)分离,以与正确的编辑器字段/文本框相关联?现在一切正常:)酷,尝试了此方法,但我现在正在计算0,是“.calculationClass”我应该分配给我的/textbox字段的内容?你需要更改选择器,使其与要计算的元素匹配。很好,尝试了此操作,但我现在正在计算0,是“.calculationClass”吗