单击按钮时的窗口属性
Window attribute when i click button
我的回调函数有问题,我想这就是为什么我点击按钮时有窗口属性的原因。这是代码
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) });
有人知道我做错了什么吗?
简单的答案是this
正在丢失上下文,因为按钮没有直接调用removeProduct
。相反,您正在传递一个匿名函数,然后该函数将调用removeProduct
。在非严格模式下,javascript会将未定义的this
值强制转换为window
,因此会出现问题。
为了解决这个问题,你可以使用评论中提到的呼叫方法,尽管我会做一个调整:
$(".removeProduct").click(function () {
removeProduct.call(this, updateTotal);
});
由于匿名函数具有适当的上下文,因此我们可以使用匿名函数中的this
来调用removeProduct
。
我不想谈太多细节,因为这个问题在这个网站和网上都有很好的记录,但如果你想阅读更多关于call
如何工作的信息,这里有文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
相关文章:
- 如何在选项卡上定义属性'的主窗口对象
- 单击按钮时的窗口属性
- 在剑道窗口的模板属性中使用AngularJS代码
- 如何在弹出窗口中隐藏文本属性'It’传单上没有填写
- 将地理 JSON 要素属性添加到地图框弹出窗口
- 有没有更好的方法来处理窗口属性&React/Redux中的子组件
- 窗口对象属性返回一个dom节点
- 选项卡的属性对于选项卡式浏览器窗口中的每个选项卡都具有相同的值
- 如何从父窗口添加弹出窗口的某些属性
- 调整窗口大小时更新数据属性
- 使用变量搜索窗口中的属性使用'在'中;
- 全局变量只是“窗口”对象的属性吗?
- 自定义镶边扩展程序中的挂钩窗口属性
- 是否可以在窗口属性上捕获未定义的引用
- JavaScript中未定义与已定义的窗口属性
- 获取所有用户定义的窗口属性
- 如何通过Javascript删除最小化和最大化窗口属性
- 了解顶级窗口属性
- 在窗口属性中实例化的模块模式
- 分配给窗口属性的函数是否仍然可以访问局部变量?