2012-04-19 76 views
0

我的脚本页面只有一个函数,它给了我这个错误:Uncaught TypeError:非法调用。说实话,我以前从来没有见过这个错误,而我在网上发现的其他案例似乎都不适用于我。我的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; 
    }); 
}); 
+2

当'deliver'是一个jQuery对象时,使用''deliver':delivered'是否奇怪?也许你应该做'deliver:deliver.is(“:checked”)? 1:0'或使用你的'deliverBoolean'的东西? – 2012-04-19 16:57:33

+0

@jamund我不确定我是否明白你在那里放置那个 – radleybobins 2012-04-19 17:03:48

+1

@radleybobins:在你的$ .post调用中。 – 2012-04-19 17:11:18

回答

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"); 
     } 
); 
+0

谢谢你只是写同样的:) – 2012-04-19 17:15:44

+0

@TobiasKrogh:伟大的思想家都认为:-) – 2012-04-19 17:16:39

1

我认为错误的是这一部分的内部:

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

在这里,我想你想,当你正在使用最接近得到“TR”元素this是与上面相同。但在这里this是$ .post imho的上下文。

你要么需要绑定或者说在事件处理函数的顶部做var boxChange = $(this),和使用缓存的参考事后

+0

这是一个很好的想法,但我彻底解决了问题,问题依然存在。 – radleybobins 2012-04-19 17:09:30