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 に答える