web-dev-qa-db-ja.com

方法の変更Drupal 7はJavaScriptとjQueryを処理します

現在、管理ページで実行するJavaScriptスクリプトを開発しています。 Drupal 7で行われた変更、つまりdocument.ready()から独自のjQuery関数への移動)を確認しましたが、次のスクリプトは機能しません。

_(function ($) {
  console.log('hello');
  $('#edit-apiusername').append('test');
})(jQuery);
_

console.log()が起動し、出力を確認できますが、単純な追加が機能しません。フィールドIDは正しいです。
ここで何が欠けているのかはわかりませんが、オブジェクトを参照している方法と関係があると思います。ビュー3のJavaScriptコードを見ると、同じように実行されていることがわかります。

14
digital

変更を誤解したと思います。

jQueryへのショートカットとして_(function ($) { ... })(jQuery);_を使用できるようにするには、JavaScriptコードを_$_でラップする必要があります。これは jQueryが他のライブラリとうまく連携する を許可するためです。この関数では、DOMを変更する場合は、DOMがロードされるのを待つ必要があります。これが、コードをjQuery.ready(function(){ ... })でラップすることです。

ただし、jQuery.ready(function(){ ... })を使用する代わりに、 se behaviors を使用して、コードがDOMから追加された( または削除された )ものを処理することをDrupalのJavaScriptに認識させる必要があります。 。

_(function ($) {
  Drupal.behaviors.exampleModule = {
    attach: function(context, settings) {
      $(context).find('#edit-apiusername').append('test');
    }
  }
})(jQuery);
_
28
Pierre Buyle

次のように、jQueryオブジェクト全体を任意の別の変数にエイリアスすることも検討できます。

$j = jQuery.noConflict();

これをreadyステートメントの外側に置いて、カプセル化の外側からアクセスできるようにします。

1
Artur