2

テーブルにいくつかのエントリを含む Web サイトにダッシュボードがあり、テーブルの各エントリにはdeleteボタンがあります。ユーザーがdeleteボタンをクリックすると、Ajax 呼び出しが発生し、コールバック関数でそのエントリを削除しています。私のコード:

$(".del").live({
    click: function () {
        $.post("/Home/DeleteTemplate", {
            name: $(this).parent().siblings("td:first").children("a").html()
        }, function (data) {
            $(this).parents("tr").remove(); //Inside the callback
        });
    }
});

今私の問題は、コールバック関数で行を削除していた場合、行がエントリからすぐに削除されなかったことです。結果を確認するには、ダッシュボードを閉じて再度開く必要があります。

しかし、コールバック関数の外でエントリを削除すると、同時に削除されます。

$(".del").live({
    click: function () {
        $.post("/Home/DeleteTemplate", {
            name: $(this).parent().siblings("td:first").children("a").html()
        });
        $(this).parents("tr").remove(); //Outside the callback   
    }
});

ここで何が問題なのですか?

4

1 に答える 1

4

thisコールバック内でセレクターを参照しない場合は、次のようにします。

$(".del").live({ click: function () { 
  var that = $(this); // added this

  $.post("/Home/DeleteTemplate", 
        { name: that.parent().siblings("td:first").children("a").html() }, 
        function (data) { 
        that.parents("tr").remove(); // used "that" here
        }); 
  } 
});
于 2012-06-19T11:25:53.580 に答える