0

Drupal 内で次の問題が発生していますが、Drupal 固有の問題ではない可能性があります。

私は次の単純なJavaScriptを持っています:

(function ($) {

  function testing(){
    alert('TEST function responding!');
  }

})(jQuery);

そして、次のコードを使用して Drupal モジュールからその関数を呼び出そうとしています:

drupal_add_js('jQuery(document).ready(function () { testing(); });',
  array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
);

ただし、 Uncaught ReferenceError: testing is not definedというエラーが表示されます

その関数内で jQuery の機能を利用したいので、通常の JavaScript ファイルを使用していません。

4

3 に答える 3

1

簡単で汚い答え: 定義しているスコープとtesting()呼び出しているスコープは同じではありません。グローバル スコープのテストを定義することもできますが、これは大規模なアプリケーションのベスト プラクティスではありません。

(function ($) {
    window.testing = function(){
        alert('TEST function responding!');
    }
})(jQuery);
于 2012-10-17T14:37:00.453 に答える
0

関数を jQuery 変数に拡張する場合は、次のようにします。

if( !jQuery.testing ){

jQuery.extend( {
    testing: function() { 
        console.log("Calling from extend function in jQuery");
    }
});
}

そしてそれを呼び出すには:

drupal_add_js('jQuery(document).ready(function () { jQuery.testing(); });',
  array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
);
于 2012-10-17T14:42:06.580 に答える
0

コードの最初の部分を外部 JavaScript に保存していますか? drupal_add_js を使用してそれを参照します。

drupal_add_js('js/external.js');

//external.js
jQuery.noConflict();
jQuery(document).ready(function($) {
window.testing = function(){
    alert('TEST function responding!');
// The useful part of this is the ability to use $ from now on. e.g., $('body').hide();
}
});
});

次に、JavaScript を追加します

drupal_add_js('jQuery(document).ready(function () { testing(); });',
array('type' => 'inline', 'scope' => 'footer', 'weight' => 5)
);
于 2012-10-17T14:56:17.423 に答える