单击按钮时的窗口属性

Window attribute when i click button

本文关键字:窗口 属性 按钮 单击      更新时间:2023-09-26

我的回调函数有问题,我想这就是为什么我点击按钮时有窗口属性的原因。这是代码

            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