0

我有这个函数,我需要在函数之外获取变量 $overall 的值,我该怎么做?

$(function(){
     function ca($tr_value, $qty ){
     window.$overall = 0;

    $($tr_value).each(function() {

        var $qnt = $(this).find($qty);
        var $price = $(this).find("td").eq(2);

        var sum = parseFloat($price.text()) * parseFloat($qnt.val());

        $(this).find("td").eq(3).text(sum);
        $(this).find(".priceitem").attr('value', $(this).find("td").eq(2).text());
        $(this).find(".totalitem").attr('value', sum);

        $overall += sum;

        return window.overall;

    });

    $("#total").text($overall);
    $(".total").attr('value', $overall);
}

    function ca_transp(){
    var $overall_transp = 0;

    $("tr.sum_transp").each(function() {

        var $qnt = $(this).find(".qty_transp");
        var $price = $(this).find("td").eq(2);

        var sum = parseFloat($price.text()) * parseFloat($qnt.val());

        $(this).find("td").eq(3).text(sum);
        $(this).find(".priceitem").attr('value', $(this).find("td").eq(2).text());
        $(this).find(".totalitem").attr('value', sum);

        $overall_transp += sum;

    });

    $("#total_transp").text($overall_transp);
    $(".total").attr('value', $overall_transp);

}

//]]>  

   function suma_total(){
    var $suma_total = 0;    

    $("tr.total").each(function() {

        //var $qnt = $(this).find(".total");

        var $total_parcial = $(this).find("td").eq(1);
        var sum = parseFloat($total_parcial.text());


        $(this).find("td").eq(1).text(sum);
        $suma_total += sum;


    });





    $("#total_cotizacion").text($suma_total);
    $(".total_cotizacion").attr('value', $suma_total);

}
    ca_transp();
    $('input.qty_transp').bind('change keyup',function(){ca_transp();});
    ca("tr.sum", ".qty");
    $('input.qty').bind('change keyup',function(){ca("tr.sum", ".qty");});
    alert($overall);

});

谢谢你的帮助。

4

3 回答 3

2

在函数之外定义它,这将使它成为全局的。

$(function(){
    var $overall;
    function ca($tr_value, $qty ){
       $overall = 0;
       $($tr_value).each(function() {

PS你也是嵌套document.ready函数。你不需要这样做。事实上,你的代码可以清理很多。我认为您不需要创建全局$overall变量。你的代码目前没有结构化,如果你清楚你的意图是什么,那么我可以修改它。

于 2012-05-25T13:42:44.050 回答
1

这是简单的范围问题。

选项:

  1. 将变量移动到全局范围
  2. 将值存储在 DOM 中的隐藏元素中。
  3. 使它们共享相同的范围。
于 2012-05-25T13:43:04.647 回答
1

您可以从 ca 函数中返回它,而不是创建一个邪恶的全局变量。

$(function () {
   //$overall doesn't need to be the same name here, you could call it "$returnedOverall" for example, and it would still work
   var $overall = ca("tr.sum", ".qty");
   alert($overall); //will show you the value of $overall, returned from the above call
   $('input.qty').bind('change keyup', function () {
       ca("tr.sum", ".qty");
       var $overall2 = ca("tr.sum", ".qty");
       alert($overall2); //will show you the value of $overall2, returned from the above call
   });
});

//ca doesn't need to be in your jQuery document.ready function, it only needs to be called from within document.ready
function ca($tr_value, $qty) {
    var $overall = 0;
    $($tr_value).each(function () {
        var $qnt = $(this).find($qty);
        var $price = $(this).find("td").eq(2);
        ...
        $overall += sum;
        //don't return it here, this is inside your jQuery.each function
    });
    //return it here, from your ca function
    return $overall;
}
于 2012-05-25T14:11:07.627 回答