无法在匿名函数中访问本地变量。那么在下面的代码中这样做的正确方法是什么?我想要做的是当在输入字段中输入某些内容然后它与值相乘然后我需要将其添加到名为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);
});
}
答案 0 :(得分:3)
首先,您应始终声明您的变量。
其次,在这种情况下,你必须在匿名函数之外声明它,然后在其中使用它。
$.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);
});
}
答案 1 :(得分:0)
price1Total
将永远在该代码中未定义。
在被分配为正在评估的total = price1Total;
语句的事件处理程序之间触发keyup事件是不可能的。
你需要重新设计你的逻辑,因此它要么不依赖于keyup事件,要么所有依赖于它的事情都发生在 in 事件处理程序中。
答案 2 :(得分:-1)
您为keyup()
回调定义的匿名函数是一个闭包,这意味着它将在全局范围之外执行&变量total1price
未在您的代码中定义,这意味着JavaScript引擎将自动在全局范围内声明此变量。
现在您的方法的问题是,当您尝试在keyup闭包/回调函数之外引用total1price
变量时,它将无法使用,因为在触发keyup处理程序之前不会定义此变量因此它将其中包含默认值undefined
。
如何解决问题:
尝试移动以下行
$('#total').show();
$('#total').text(total1price);
在keyup
事件回调函数内部,一旦找到total1price
的值,就会在DOM上更新总值。