[英]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.