在ajax请求中没有删除tr。
在ajax请求中没有删除tr。
我试图使用closest函数从表格中删除tr。\n这个函数在$.post请求之外正常工作,但是当相同的脚本在post请求中使用时,它不起作用。\n我的代码是\n
$(".delete_cat").click(function() { var idd = $(this).val(); $.post("category/delete", {id:idd}, function(data) { if (data === 1) { var tr = $(this).closest('tr').remove(); tr.css("background-color","#FF3700"); tr.fadeOut(400, function(){ tr.remove(); }); } } ) })
问题的原因是,在ajax请求中,没有通过tr.remove()方法删除tr元素。
解决方法是,将tr.remove()方法放在回调函数的外部,这样可以正确删除tr元素。
具体代码如下:
$(".delete_cat").click(function() { var $this = $(this); var idd = $this.val(); $.post("category/delete", {id:idd}, function(data) { if (data === 1) { var tr = $this.closest('tr'); tr.css("background-color","#FF3700"); tr.fadeOut(400, function(){ tr.remove(); }); } }); });
其中,tr.remove()
方法被移动到回调函数的外部。这样做可以确保在删除tr元素之前执行其他操作,比如改变背景颜色和淡出效果。
另外,需要注意的是,.delete_cat
是一个动态元素,因此需要使用事件委托来绑定点击事件。
最后,可以通过在点击处理程序上添加alert语句来验证代码是否正常工作。
问题原因:在post请求的success函数中,使用了一个变量that来保存点击事件中的this指向的对象,但是在success函数中,this指向的是不同的实例。
解决方法:将that变量的值传递到success函数中,以便在函数中使用正确的实例。
在上述代码中,我们可以看到一个点击事件的处理函数。该函数在点击".delete_cat"元素时触发。在函数中,我们可以看到使用了一个变量that来保存点击事件中的this指向的对象。
问题出现在post请求的success函数中。在这个函数中,this指向的是不同的实例,与点击事件中的this指向的对象不同。
要解决这个问题,我们可以通过将that变量的值传递到success函数中,以便在函数中使用正确的实例。
具体的解决方法如下:
$(".delete_cat").click(function() { var that = this; var idd = $(that).val(); $.post("category/delete", { id: idd }, function(data) { if (data === 1) { var tr = $(that).closest('tr').remove(); tr.css("background-color", "#FF3700"); tr.fadeOut(400, function() { tr.remove(); }); } } ); });
通过上述修改,我们可以确保在success函数中使用的是正确的实例,从而解决了"tr didn't remove in ajax request."这个问题。
这个问题的出现原因是在ajax调用中丢失了元素的上下文。可以使用ajax的context选项来设置点击的.delete-cart元素的上下文:
$.post("category/delete", {id:idd}, context:this, function(data) { if (data === 1) { var tr = $(this).closest('tr').remove(); tr.css("background-color","#FF3700"); tr.fadeOut(400, function(){ tr.remove(); } });
解决方法参考了stackoverflow上的Context option in ajax的回答。