it-swarm.it

Modifiche nel modo Drupal 7 gestisce JavaScript e jQuery

Attualmente sto sviluppando uno script JavaScript che viene eseguito su una pagina di amministrazione. Ho letto le modifiche apportate a Drupal 7, ovvero il passaggio da document.ready() alla sua funzione jQuery. Tuttavia, il seguente script non funziona.

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

console.log() è attivo e posso vedere l'output, ma la semplice aggiunta non funziona. L'ID campo è corretto.
Non sono sicuro di cosa mi manchi qui, ma sospetto che abbia a che fare con il modo in cui mi riferisco all'oggetto. Guardando il codice JavaScript di Views 3, vedo che è fatto in modo simile.

14
digital

Penso che tu abbia frainteso i cambiamenti.

Il codice JavaScript deve essere racchiuso tra (function ($) { ... })(jQuery); Per consentire l'uso di $ Come collegamento a jQuery. Questo per consentire jQuery di giocare bene con altre librerie . In questa funzione, devi ancora attendere il caricamento del DOM se vuoi modificarlo. Questo è ciò che fa il wrapping del codice in jQuery.ready(function(){ ... }).

Invece di usare jQuery.ready(function(){ ... }), dovresti sare comportamenti per far sapere a JavaScript di Drupal che il tuo codice vuole elaborare qualsiasi cosa aggiunta ( o rimossa ) dal DOM .

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

Puoi anche prendere in considerazione l'alias dell'intero oggetto jQuery su un'altra variabile di tua scelta, come in:

$j = jQuery.noConflict();

Metteresti questo fuori dall'istruzione ready per renderlo accessibile al di fuori dell'incapsulamento.

1
Artur