在ajax请求中没有删除tr。

12 浏览
0 Comments

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

0
0 Comments

问题的原因是,在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语句来验证代码是否正常工作。

0
0 Comments

问题原因:在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."这个问题。

0
0 Comments

这个问题的出现原因是在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的回答。

0