JQuery的closest方法无法找到类

3
我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我有以下结构,其中有几行如下:

<tr class="tableRow">
    <td>blah</td>
    <td>blah</td>
    <td><button id="13" class="deleteMailshot" type="button"></button></td>
</tr>

我希望执行一个ajax调用来删除所选择的邮件群发,然后移除该行。
我使用了.closest(),但它没有找到...这是我的尝试:
$.ajax({
    type: "POST",
    url: '/ajax/actions/deleteMailshot.php',
    data: {mailshot_id:mailshot_id},
    success:  function(data) {
        $(this).closest('.tableRow').fadeOut();
    }
});

我也尝试过:

$(this).parent().parent('.tableRow').fadeOut();

我怀疑success中的$(this)指向了一些意外的东西,请尝试查看控制台以获取可能的错误信息。 - King King
1
@KingKing - 根据jQuery文档,成功处理程序中的this指向在ajax调用中使用的ajax设置对象。但是,正如我在我的答案中所描述的那样,可以使用context属性告诉jQuery您希望将this设置为什么。 - jfriend00
3个回答

4

AJAX 之前将其分配给一个变量。这个变量在 success 的匿名函数内部指向其他内容。

例如:

var $button = $(this);

然后使用:

$button.closest...

3

试试这个

var self = $(this);
$.ajax({
  ....
  success:  function(data) {
    self.closest('.tableRow').fadeOut(); // use self

3

您可以使用 context 选项来控制 ajax 调用中的 this 指针将被设置为成功处理程序内部的内容:

$.ajax({
    type: "POST",
    url: '/ajax/actions/deleteMailshot.php',
    data: {mailshot_id:mailshot_id},
    context: this,
    success:  function(data) {
        $(this).closest('.tableRow').fadeOut();
    }
});

默认情况下,成功处理程序中的this指向调用中使用的ajax设置对象,但如果不需要引用该对象,则设置context属性允许您保持this与调用$.ajax()时相同,因此您可以直接使用它,而无需使用其他答案中提供的解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接