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/если? Не имеет смысла для меня?: (
Любая помощь здесь? Спасибо заранее.
Ответы
Ответ 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>