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

Uncaught TypeError: Невозможно вызвать метод 'toLowerCase' из undefined

Я столкнулся с очень туманной ошибкой, выполняя некоторые простые манипуляции с DQ jQuery.

Линией, вызвавшей ошибку, является следующее:

$(this).closest('tr').remove();

Ошибка, указанная в заголовке, следующая:

Uncaught TypeError: невозможно вызвать метод 'toLowerCase' из undefined

в файле: jquery-1.6.2.js.

Я уже пробовал с jQuery 1.6.3 и jQuery 1.5.1, но ничего не изменилось. Я все еще продолжаю получать ошибку.

Приведенная выше строка привязана к кнопке, которая при щелчке отправляет запрос AJAX POST, а затем при успешном удалении ее удаляет <tr>. Я уже пробовал другой способ:

$(this).parent().parent().remove(), но, к моему удивлению, это ничего не делало.

Я использую Chrome, если это имеет значение, но я получаю ту же ошибку в FF.

EDIT:

Это мой код:

$(".remove").live('click', function(e)  {
    var str = $(this).attr('id').match(/\[(.*?)\]\[(.*?)\]/);
    var type = str[1];
    var id = str[2];

            // IF I PUT THE remove() HERE, IT WORKS.

    $.ajax({
        type: 'POST',
        url: '/admin/ajax_remove_event_detail',
        data: {type: type, id: id},
        success:function(res)   {
            if(res)
            {
                $(this).closest('tr').remove();
                // this gives me an error
            }
            else
            {
              // error handling 
            }
        }
    });

    e.preventDefault();
});

Если я выложу remove() за пределами if, то он работает. Почему он не будет работать, если он внутри вызова ajax/если? Не имеет смысла для меня?: (

Любая помощь здесь? Спасибо заранее.

4b9b3361

Ответ 1

Я не знаю, что вы ожидаете, что значение this будет в вашем "успешном" обработчике, но я уверен, что это не то, что вы думаете. Сохраните this вне вызова $.ajax():

var clicked = this;
$.ajax(
  // ...
  success: function(res) {
    if (res) {
      $(clicked).closest('tr').remove();
    }
    else {
      // ...
    }
  }
);

Ответ 2

Внутри вашего запроса $(this) не является элементом .remove. Это проблема закрытия.

Итак, вы можете назначить $(this) переменной до и вызвать ее после

Ответ 3

// assign this to a variable

var val = this;

// Use

$(val).closest('tr').remove(); // It worked for me

Вместо:

$(this).closest('tr').remove();

Ответ 4

Я получил точно такую ​​же ошибку в $. get() запросе.

Для меня это самая странная ошибка в jQuery (моя версия 1.8.3).

Моей причиной этой ошибки был элемент TD с идентификатором, установленным на "nodeName" .

После изменения значения ID на что-то еще, ошибка исчезнет.

Оригинал:

<td id="nodeName"></td>

Новое:

<td id="nodeNameValue"></td>