-2

出于某种原因,我根本无法定义变量“total”...

我将它定义为 74,但由于某种原因它不想坚持..我做错了什么?提前致谢!

$(document).ready(function() {

    function getParameterByName(name)
    {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(window.location.search);
        if(results == null)
            return "";
        else
            return decodeURIComponent(results[1].replace(/\+/g, " "));
    }

    $(".tab-content").hide(); //Hide all content
    $("ul.tabs li:first").addClass("active").show(); //Activate first tab
    $(".tab-content:first").show(); //Show first tab content


    $('.question-form-submit').click(function(e) {
        e.preventDefault();
        var activeTab = '#'+$(this).attr('name');
        var activeClass = activeTab.substr(5);
        $("ul.tabs li").removeClass("active"); 
        $('ul li:nth-child('+activeClass+')').addClass("active"); //Add "active" class to selected tab
        $(".tab-content").hide(); //Hide all tab content
        $(activeTab).fadeIn(); //Fade in the active ID content


        $('.meter-value').removeClass('meter-width');

        switch (activeClass) {
            case '2' :
                $('.meter-value').attr('style', 'background-color: #9496c9; width: 46.5%;');
                break;

            case '3' :
                $('.meter-value').attr('style', 'background-color: #9496c9; width: 67%;');
                break;

            case '4' :
                $('.meter-value').attr('style', 'background-color: #9496c9; width: 100%;');
                break;

        }

        return false;
    });

    $('.quantity, .init_cost').change(function() {

        var row_id = $(this).attr('id');
        var row_number = row_id.substr(9);
        var item_cost = $('#cost_'+row_number).attr('value');
        var item_quantity = $('#quantity_'+row_number).attr('value');
        var final_cost = item_cost * item_quantity;

        $('#final_cost_'+row_number).val(final_cost).formatCurrency();;

    });

    $('.row input').each(function(index) {

        var row_id = $(this).attr('id');
        var row_number = row_id.substr(9);
        var item_cost = $('#cost_'+row_number).attr('value');
        var item_quantity = $('#quantity_'+row_number).attr('value');
        var final_cost = item_cost * item_quantity;

        $('#final_cost_'+row_number).val(final_cost).formatCurrency();;

    });

        var total = 0;
        $('.final_cost').each(function(index) {

            var final_cost = $(this).attr('value').substr(1);
            var total = total + final_cost;
            console.log(total);

        })

});
4

8 回答 8

4

该行的内部声明var total = total + final_cost;隐藏了该行的外部声明var total = 0;

于 2012-04-09T19:14:10.517 回答
3

每个total函数中的 都遮蔽了外部函数。

同样的事情的一个更简单的例子是在这里

(function()
 {
     var total = 1;
     console.log("total 1: " + total);
     (function()
      {
          console.log("total 2: " + total);
          var total = total + 3;
          console.log("total 3: " + total);
      })()
 })();

除了阴影之外,您还必须考虑吊装。因为内部的var被提升到了顶部,所以内部函数大致相当于:

function()
{
    var total = undefined;
    console.log("total 2: " + total);
    total = total + 3;
    console.log("total 3: " + total);
}

在这种情况下,我认为您根本不想要 innervar关键字。在其他情况下,您将使用不同的变量名称。

于 2012-04-09T19:13:52.700 回答
1

每次循环时,您都在重新定义总数

$('.final_cost').each(function(index) {

    var final_cost = $(this).attr('value').substr(1);
    var total = total + final_cost;
    console.log(total);

})

为什么不试试这个?

$('.final_cost').each(function(index) {

    var final_cost = $(this).attr('value').substr(1);
    total = total + final_cost;
    console.log(total);

})
于 2012-04-09T19:14:51.700 回答
1

尝试在总数之前删除第二个 var。

total = total + final_cost;
于 2012-04-09T19:15:28.847 回答
0

那是因为你声明了变量两次(每次你写var total它都会重新声明。所以你有一个在“final_cost”函数之外,一个在里面,它被设置为从外部 + final_cost 的总数。所以实际上你总是记录的值最终成本。

只需编写total = total + final_cost;,它应该可以工作。

于 2012-04-09T19:15:23.673 回答
0

语法错误,杀死你的脚本:

    $('#final_cost_'+row_number).val(final_cost).formatCurrency();;
                                                                  ^--- extra ;

下次,检查浏览器的控制台(FF/Chrome 中的 shift-ctrl-J)是否有错误。像这样的事情会立即报告。

于 2012-04-09T19:15:42.560 回答
0

我将替换该行:

var total = total + final_cost;

和:

total += final_cost
于 2012-04-09T19:17:33.380 回答
0

不确定这个答案,但是,尝试首先使用默认值(如 0)定义变量 total,然后使用 total + final_cost 操作。

var total = 0;
total += final_cost;

这是为什么?当您声明没有默认值的总计时,该值将是“未定义”,因此 javascript 将表示以下内容:

var total = "undefined" + final_cost;

我想这就是错误。

于 2012-04-09T19:50:29.947 回答