jQuery ajax this.id undefined

时间:2011-11-18 18:10:11

标签: jquery ajax

我有一个使用AJAX删除的项目列表。

这个列表是一个简单的列表,其中包含div,每个div都是一个id,因此当从数据库中删除该项时,我返回true,然后删除该行。

这是我的代码:

HTML

<div id="row1">
<div>item1</div>
<div><a href="...">view</a></div>
<div><a id="1">delete</a></div>
</div>

JS

$('.delete').click(function () {
    if (!confirm('Are you sure you want to delete?')) {
        return false;
    }
    $.ajax({
        type: "POST",
        url: '/delete_record',
        data: 'id=' + this.id,
        cache: false,
        success: function (result) {
            if (result == 'good') {
                $('#row' + this.id).remove();
            }
        }
    });
});

由于某种原因,this.id不起作用,因为this.id未定义...为什么?我的href上有id="1"

5 个答案:

答案 0 :(得分:14)

您使用的是指ajax对象,因为该函数中有一个新的范围。如果要在范围外访问变量,则必须在ajax调用之前声明它们。

$('.delete').click(function () {
    if (!confirm('Are you sure you want to delete?')) {
        return false;
    }
    var _this = this;
    $.ajax({
        type: "POST",
        url: '/delete_record',
        data: 'id=' + this.id,
        cache: false,
        success: function (result) {
            if (result == 'good') {
                $('#row' + _this.id).remove();
            }
        }
    });
});

答案 1 :(得分:4)

您的ID不应以数字开头。以下是制定有效身份证明的方法:What are valid values for the id attribute in HTML?

成功回调函数中的

this不会引用点击处理函数中的this。因此,您需要在单击处理程序中引用this,以便在回调函数中访问它:

$('.delete').click(function () {
    if (!confirm('Are you sure you want to delete?')) {
        return false;
    }
    var that = this;
    $.ajax({
        type: "POST",
        url: '/delete_record',
        data: 'id=' + this.id,
        cache: false,
        success: function (result) {
            if (result == 'good') {
                $('#row' + that.id).remove();
            }
        }
    });
});

答案 2 :(得分:0)

尝试在$.ajax $this

之前声明

喜欢:

  

var $ this = this;

并使用变量。

$('.delete').click(function () {
   var $this = this;

  if (!confirm('Are you sure you want to delete?')) {
      return false;
  }

  $.ajax({
      type: "POST",
      url: '/delete_record',
      data: 'id=' + $this.id,
      cache: false,
      success: function (result) {
          if (result == 'good') {
              $('#row' + $yourid).remove();
          }
      }
 });
});

答案 3 :(得分:0)

$('.delete').click(function () {
    if (!confirm('Are you sure you want to delete?')) {
        return false;
    }

    var id = this.id; // here is the magic

    $.ajax({
        type: "POST",
        url: '/delete_record',
        data: 'id=' + this.id,
        cache: false,
        success: function (result) {
            if (result == 'good') {
                $('#row' + id).remove();
            }
        }
    });
});

答案 4 :(得分:-1)

我没有在你的html中看到任何带有'delete'类的元素。假设它是删除链接,您需要使用$(this).attr('id')而不是this.id来获取ID。