Javascript变量未定义

Javascript变量未定义,javascript,jquery,Javascript,Jquery,由于某些原因,我根本无法定义变量“total” 我把它定义为74,但由于某种原因,它不想继续。。我做错了什么?提前谢谢 $(document).ready(function() { function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=

由于某些原因,我根本无法定义变量“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);

        })

});

每个函数中的
total
与外部函数的阴影相同

一个简单的例子是:

除了阴影之外,你还必须考虑。由于内部var被提升到顶部,因此内部功能大致相当于:

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

在这种情况下,我认为您根本不需要内部
var
关键字。在其他情况下,您可以使用不同的变量名。

var total=total+final\u cost隐藏行
var total=0的外部声明

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

$('.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);

})

这是因为您声明了两次变量(每次编写
var total
时,它都会被重新声明。因此,您在“final_cost”函数外有一个变量,在函数内有一个变量,它被设置为total from outside+final_cost。因此,实际上,您总是记录final_cost的值


只要写下
total=total+final_cost;
,它就会起作用。

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

total = total + final_cost;

语法错误,正在终止脚本:

    $('#final_cost_'+row_number).val(final_cost).formatCurrency();;
                                                                  ^--- extra ;
下次,请检查浏览器控制台(FF/Chrome中的shift-ctrl-J)是否有错误。类似的情况会立即报告。

我会替换该行:

var total = total + final_cost;
与:


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

var total = 0;
total += final_cost;
这是为什么?当您在没有默认值的情况下声明总计时,该值将是“未定义”的,因此javascript将表示以下内容:

var total = "undefined" + final_cost;

我想这就是错误所在。

这篇文章中的代码太多,而且没有行号,所以不容易看出你在说什么。如果我能在所有这些代码中找到
total
,我不认为额外的分号会导致JS出现问题
var total = 0;
total += final_cost;
var total = "undefined" + final_cost;