簡単なjQuery DOM操作を行っているときに、非常にあいまいなエラーに遭遇しました。
エラーをトリガーした行は次のとおりです。
$(this).closest('tr').remove();
タイトルに記載されているエラーは次のとおりです。
不明なTypeError:未定義のメソッド 'toLowerCase'を呼び出すことはできません
ファイル:_jquery-1.6.2.js
_。
私はすでにjQuery 1.6.3とjQuery 1.5.1を試しましたが、何も変わりませんでした。引き続きエラーが発生します。
上記の行はボタンにバインドされており、クリックするとAJAX POST要求を送信し、成功すると独自の_<tr>
_を削除します。私はすでに別の方法を試しました:
$(this).parent().parent().remove()
しかし、驚いたことに、これは何もしませんでした。
重要な場合に備えてChromeを使用していますが、FFでも同じエラーが発生します。
編集:
これは私のコードです:
_$(".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();
});
_
もしどこかにif()の外にremove()を置くと、うまくいきます。 ajax呼び出し/ if内にあると機能しないのはなぜですか?私には意味がありませんか? :(
ここで何か助け?前もって感謝します。
あなたが何をexpectthis
の値があなたの「成功」ハンドラにあるのかわかりませんが、それはあなたが思うことではないに違いありません。 「$ .ajax()」呼び出しの外にthis
を保存します。
var clicked = this;
$.ajax(
// ...
success: function(res) {
if (res) {
$(clicked).closest('tr').remove();
}
else {
// ...
}
}
);
リクエスト内では、$(this)は.remove
要素ではありません。これは閉鎖の問題です。
そのため、前に変数に$(this)を割り当て、後に変数を呼び出すことができます
// assign this to a variable
var val = this;
// Use
$(val).closest('tr').remove(); // It worked for me
の代わりに :
$(this).closest('tr').remove();