7

次の関数 (実際に機能する) は、ベスト プラクティスの点で悪いですか?

IDE が警告している

「「これ」の使用法が無効である可能性があります。Javascript 'this' が同じクロージャーまたは外部コンテンツにあることを確認します。

$(document).on('change', '#select-all', function(){
    if( this.checked ) {
      $(this).closest('table').find('input[name="row-id"]').each( function() {
        this.checked = true; // Here
      })
    }
    else {
      $(this).closest('table').find('input[name="row-id"]').each( function() {
        this.checked = false; // Here
      });
    }
  });

ID のチェックボックスをオンselect-allにすると、他のすべてが選択済みとしてマークされます。

4

2 に答える 2

6

ほとんどの場合、使用する関数でどのオブジェクトが参照されているかを IDE が認識していないために発生し、オブジェクトまたは別のコンテキストを参照している可能性がthisあるヒントが得られます。thiswindow

ちなみに、コードは次のように書き換えることができます。

$(document).on("change", "#select-all", function() {
    $(this)
      .closest("table")
      .find("input[name='row-id']")
      .prop("checked", this.checked);
});
于 2013-10-10T14:01:36.453 に答える
3

@ホルヘは、javascriptのクロージャーの範囲との使用に関係していますthis

さらに読むには、これを試してください:http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this/

完全には読んでいませんが、かなりうまくまとめられています。

于 2013-10-10T14:00:48.600 に答える