Подтвердить что ты не робот

JQuery ajax this.id undefined

У меня есть список элементов, которые я удаляю с помощью AJAX.

Этот список представляет собой простой список с div и каждый div как идентификатор, поэтому, когда элемент удаляется из базы данных, я возвращаю 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 есть undefined... почему? У меня есть id="1" на моем href.

4b9b3361

Ответ 1

Используемое вами значение относится к объекту 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();
            }
        }
    });
});

Ответ 2

Ваш идентификатор не должен начинаться с номера. Вот как сформулировать действительный id: Каковы допустимые значения для атрибута id в 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();
            }
        }
    });
});

Ответ 3

попробуйте объявить перед $.ajax $this

like:

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

Ответ 4

$('.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();
            }
        }
    });
});

Ответ 5

Я не вижу ни одного элемента с классом "delete" в вашем html. Предполагая, что это ссылка удаления, вам нужно получить идентификатор с $(this).attr('id') вместо this.id.