单击按钮时的窗口属性

时间:2016-05-08 20:06:50

标签: javascript jquery

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

            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) });

有人知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

简短的回答是this正在丢失上下文,因为按钮没有直接调用removeProduct。相反,您传递的是匿名函数,然后调用removeProduct。在非严格模式下,javascript会将未定义的this值强制转换为window,从而解决您的问题。

要解决此问题,您可以使用评论中提到的调用方法,但我会进行一次调整:

$(".removeProduct").click(function () {
  removeProduct.call(this, updateTotal); 
});

由于匿名函数具有适当的上下文,我们可以使用匿名函数中的removeProduct调用this

我不想详细介绍这个问题,因为这个问题在本网站和网上都有很好的记录,但是如果你想了解call如何在这里工作的更多信息,那就是文档:{ {3}}