0

我的脚本页面中只有一个函数,它给了我这个错误:Uncaught TypeError: Illegal invocation。老实说,我以前从未见过这个错误,而且我在网上找到的其他案例似乎都不适用于我。我的 jquery 在下面,我认为不需要任何其他部分,但请告诉我,我可以发布其他部分。

$(document).ready(function () {
    /*----UPDATE BOX REQUEST----*/
    $(".boxesChange").live("click", function () {
        entry = $(this).closest("tr");
        delivered = $(entry).find("#delivered");
        if ((delivered).is(":checked")) {
            deliveredBoolean = "1";
        } else {
            deliveredBoolean = "0";
        }
        boxesDelivered = $(entry).find("#boxesDelivered").val();
        bubbleWrapDelivered = $(entry).find("#bubbleWrapDelivered").val();
        supplyRequestId = $(entry).find(".boxesSupplyRequestId").val();

        $.post('boxesChange.php', {
            'delivered': delivered,
            'boxesDelivered': boxesDelivered,
            'bubbleWrapDelivered': bubbleWrapDelivered,
            'supplyRequestId': supplyRequestId
        }, function (response) {
            $(this).closest(".boxesScheduleEntry").css("background-color", "#ccffcc");
        });
        return false;
    });
});
4

2 回答 2

1

我认为错误在这部分内部:

function (response) {
  $(this).closest(".boxesScheduleEntry").css("background-color", "#ccffcc");
}

在这里,我认为this当您使用最接近获取“tr”元素时,您希望与上述相同。但这里this是 $.post imho 的上下文。

您要么需要绑定,要么var boxChange = $(this),在事件处理函数的顶部执行,然后使用缓存的引用

于 2012-04-19T17:05:30.283 回答
1

问题出在您的$.post电话中。您正在尝试设置'delivered'delivered,这是一个 jQuery 对象,我假设您的意思是deliveredBoolean.

另外,在回调函数this中并不是你想的那样,它是 jqXHR 对象,而不是元素。

var $this = $(this);
$.post(
        'boxesChange.php', 
        {
            'delivered': deliveredBoolean,
            'boxesDelivered': boxesDelivered,
            'bubbleWrapDelivered': bubbleWrapDelivered,
            'supplyRequestId': supplyRequestId
        },
        function (response) {
            $this.closest(".boxesScheduleEntry").css("background-color", "#ccffcc");
        }
);
于 2012-04-19T17:15:12.523 回答