簡體   English   中英

如何訪問匿名函數變量?

[英]how to access in an anonymous function variable?

無法訪問匿名函數中的局部變量。 那么在下面的代碼中執行此操作的正確方法是什么? 我要嘗試的是在輸入字段中鍵入內容時,它將與一個值相乘,然后需要將其添加到名為total的變量中。 那么這段代碼怎么了?

$('#menu input').on('click', function () {
    total = 0;

    //if checkbox with id menu1 is checked
    if ($("input#menu1").is(':checked')) {

    var name = 'menu1';

    $.post('DB.php', {name: name}, function (data) {
        //data is integer value retrieved from the database exmp: data = 200
        $('input#box1price').val(data);

        // multiplying total
        price1 = parseInt(data);
        $('input#box1quantity').keyup(function(){
            q = $(this).val();
            quantity = parseInt(q);
            price1Total = quantity * price1;
            $('input#box1total').val(price1Total);
        });

        total = price1Total; //it's saying price1Total is undefined

        $('#total').show();
        $('#total').text(total);
    });
} 

首先,您應該始終聲明變量。

其次,在這種情況下,必須在匿名函數外部聲明它,然后在內部使用它。

$.post('DB.php', {name: name}, function (data) {
       //data is integer value retrieved from the database exmp: data = 200
        $('input#box1price').val(data);

        // multiplying total
        var price1 = parseInt(data);
        var price1Total = 0;

        $('input#box1quantity').keyup(function() {
            var q = $(this).val();
            var quantity = parseInt(q);
            price1Total = quantity * price1;
            $('input#box1total').val(price1Total);
        });

        var total = price1Total;

        $('#total').show();
        $('#total').text(total);
    });
}

price1Total將始終在該代碼中未定義。

在分配為total = price1Total;的事件處理程序之間根本不可能觸發keyup事件total = price1Total; 正在評估的語句。

您需要重新設計邏輯,以便它要么不依賴於keyup事件,要么依賴於它的一切甚至都事件處理程序發生。

您為keyup()回調定義的匿名函數是一個閉包,這意味着它將在全局范圍外執行,並且變量total1price未在代碼中定義,這意味着JavaScript引擎將在全局范圍內自動聲明此變量。

現在,您的方法存在的問題是,當您嘗試在keyup閉合/回調函數之外引用total1price變量時,它將不可用,因為在觸發keyup處理程序之前將不會定義此變量,因此該變量將包含undefined的默認值。

如何解決問題:

嘗試移動下面的行$('#total').show(); $('#total').text(total1price); $('#total').show(); $('#total').text(total1price); keyup事件回調函數內部,以便一旦找到total1price的值,就在DOM上更新了總值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM