我有回调函数的问题我认为这是我点击按钮时有窗口属性的原因。这是代码
function removeProduct(callback) {
var recordchosen = $(this); ////////here I have WINDOW instead button
var recordToDelete = recordchosen.attr("data-id");
if (recordToDelete != '') {
// Send post request with AJAX
$.post("/Cart/RemoveFromCart", { "albumID": recordToDelete },
function (response) {
// Success
$('#productCart-' + response.prodID).fadeOut('slow', function () {
if (response.productsCart == 0) {
$("#cartEmpty").removeClass("hidden");
}
});
var textCart = $("#cartbox").text();
var amountCart = (parseInt(textCart) - 1);
$("#cartbox").text(amountCart);
});
callback();
return false;
};
};
$(".removeProduct").click(function () { removeProduct(updateTotal) });
有人知道我做错了吗?
答案 0 :(得分:0)
简短的回答是this
正在丢失上下文,因为按钮没有直接调用removeProduct
。相反,您传递的是匿名函数,然后调用removeProduct
。在非严格模式下,javascript会将未定义的this
值强制转换为window
,从而解决您的问题。
要解决此问题,您可以使用评论中提到的调用方法,但我会进行一次调整:
$(".removeProduct").click(function () {
removeProduct.call(this, updateTotal);
});
由于匿名函数具有适当的上下文,我们可以使用匿名函数中的removeProduct
调用this
。
我不想详细介绍这个问题,因为这个问题在本网站和网上都有很好的记录,但是如果你想了解call
如何在这里工作的更多信息,那就是文档:{ {3}}