web-dev-qa-db-ja.com

不明なTypeError:未定義のメソッド 'toLowerCase'を呼び出すことはできません

簡単な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内にあると機能しないのはなぜですか?私には意味がありませんか? :(

ここで何か助け?前もって感謝します。

24
cabaret

あなたが何をexpectthisの値があなたの「成功」ハンドラにあるのかわかりませんが、それはあなたが思うことではないに違いありません。 「$ .ajax()」呼び出しの外にthisを保存します。

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

リクエスト内では、$(this)は.remove要素ではありません。これは閉鎖の問題です。

そのため、前に変数に$(this)を割り当て、後に変数を呼び出すことができます

7
Py.
// assign this to a variable

var val = this;

// Use

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

の代わりに :

$(this).closest('tr').remove();
1
Nadeem Shinwari