0

私は次のコードを持っています:

File 1:
$(document).ready(function () {
   addDataTableExts();
}

File 2:
function addDataTableExts() {
   $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
   }
}

これは問題なく機能しているようです。私は今これを次のものに置き換えようとしました:

File 2:
(function () {

    $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
    }
}

これは機能しません。

私がこれを最初の方法で行った場合にのみ機能するように見える理由はありますか?ファイル2の最初の行を変更すると、コードを呼び出さなくてもコードが実行されると思いました。

4

2 に答える 2

2

コードをreadyイベントでの実行からすぐに実行するように変更しました。ファイル2をロードした後にデータテーブルプラグインをロードしているようです。そのため、プラグインを使用しようとすると、プラグインはまだ存在していません。

readyイベントに戻すと、機能するはずです。

File 2:
$(document).ready(function () {

  $.extend($.fn.dataTableExt.oStdClasses, {
    sWrapper: 'no-margin last-child'
  }

});

注:jQueryのイベントは排他的ではないためready、同じページに複数のイベントハンドラーを問題なく含めることができます。

于 2012-11-11T11:17:57.417 に答える
0

「ファイル2の最初の行を変更すると、コードを呼び出さなくてもコードが実行されると思いました。」

示されているように実際に最初の行だけを変更した場合は、構文エラーが発生しました。(閉じなしで開始を追加しました)。ただし、クロージング)を追加するだけでは、無名関数の式は実行されません。()ファイル1から呼び出さずにコードを実行する場合は、実際に関数を呼び出すために、最後に括弧を追加する必要があります。

また、の終わりの)後に閉じが欠落していましたが、これはコードの最初のバージョンの問題でもありました(また、ファイル1のドキュメントレディハンドラーの問題でもありました)。}$.extend(...

(function () {
    $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
    });    // <-- add missing ); here
})();      // <-- add missing )(); here

ただし、表示されていない他のコードもラップしない限り、包含関数はまったく必要ありません。これは、そのonの$ .extend()ステートメントがグローバルスコープに悪影響を及ぼさないためです。

最後に、ページの準備ができた後でそれを実行する必要がある$.extend()が、2つのファイル間に依存関係を持たせたくない場合は、ファイル2に直接ドキュメントレディハンドラーを追加できます。複数のドキュメントレディハンドラーがすべて実行されます。

于 2012-11-11T11:29:36.940 に答える