Uncaught TypeError: Невозможно вызвать метод toLowerCase из неопределенного - PullRequest
24 голосов
/ 07 сентября 2011

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

Строка, которая вызвала ошибку, выглядит следующим образом:

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

Ошибка, как указано в заголовке:

Uncaught TypeError: Невозможно вызвать метод toLowerCase с неопределенным значением

в файле: 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 / if? Не имеет смысла для меня? (

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

Ответы [ 4 ]

41 голосов
/ 07 сентября 2011

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

var clicked = this;
$.ajax(
  // ...
  success: function(res) {
    if (res) {
      $(clicked).closest('tr').remove();
    }
    else {
      // ...
    }
  }
);
7 голосов
/ 07 сентября 2011

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

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

1 голос
/ 24 марта 2016
// assign this to a variable

var val = this;

// Use

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

Вместо:

$(this).closest('tr').remove();
0 голосов
/ 27 февраля 2013

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

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

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

После изменения значения идентификатора на другое, ошибка исчезает.

Оригинал:

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

Новое:

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