it-swarm.com.de

Änderungen in der Art Drupal 7 behandelt JavaScript und jQuery

Ich entwickle derzeit ein JavaScript-Skript, das auf einer Verwaltungsseite ausgeführt wird. Ich habe mich über die Änderungen in Drupal 7) informiert, nämlich über den Wechsel von document.ready() zu einer eigenen jQuery-Funktion. Das folgende Skript funktioniert jedoch nicht.

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

console.log() wird ausgelöst und ich kann die Ausgabe sehen, aber das einfache Anhängen funktioniert nicht. Die Feld-ID ist korrekt.
Ich bin mir nicht sicher, was ich hier vermisse, aber ich vermute, dass es damit zu tun hat, wie ich auf das Objekt verweise. Wenn ich mir den JavaScript-Code von Views 3 ansehe, kann ich sehen, dass dies auf ähnliche Weise geschieht.

14
digital

Ich denke, Sie haben die Änderungen falsch verstanden.

JavaScript-Code sollte in (function ($) { ... })(jQuery); Umbrochen werden, damit $ Als Verknüpfung zu jQuery verwendet werden kann. Dies soll ermöglichen, dass jQuery gut mit anderen Bibliotheken spielt . In dieser Funktion müssen Sie noch auf das Laden des DOM warten, wenn Sie es ändern möchten. Das ist es, was das Umschließen Ihres Codes in jQuery.ready(function(){ ... }) bewirkt.

Anstatt jQuery.ready(function(){ ... }) zu verwenden, sollten Sie Verhalten verwenden verwenden, damit Drupals JavaScript weiß, dass Ihr Code alles verarbeiten möchte, was dem DOM hinzugefügt ( oder entfernt ) wurde .

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

Sie können auch in Betracht ziehen, das gesamte jQuery-Objekt auf eine andere Variable Ihrer Wahl zu aliasen, wie in:

$j = jQuery.noConflict();

Sie würden dies außerhalb der ready-Anweisung platzieren, um sie außerhalb der Kapselung zugänglich zu machen.

1
Artur