Drupal 7'nin JavaScript ve jQuery'yi işleme biçimindeki değişiklikler


14

Şu anda bir yönetim sayfasında çalışan bir JavaScript komut dosyası geliştiriyorum. Drupal 7'de yapılan değişiklikleri, yani document.ready()kendi jQuery işlevine geçmeyi okudum . Ancak, aşağıdaki komut dosyası çalışmaz.

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

console.log()ateş ediyor ve çıktıyı görebiliyorum, ama basit ek çalışmıyor. Alan kimliği doğru.
Burada neyi özlediğimden emin değilim, ancak nesneye başvurma şeklimizle ilgili olduğundan şüpheleniyorum. Views 3 JavaScript koduna baktığımda, benzer şekilde yapıldığını görebiliyorum.


Console.log ($ ('# edit-apiusername')); nesne çıktısı, yani sayfa jQuery tarafından sayfada bulunan öğe mi?
budda

Drupal 6 ile bile, yerine Drupal davranışlarını kullanmanız gerekiyordu document.ready. Bildirdiğiniz şey Drupal 7'ye özgü değil.
kiamlaluno

Yanıtlar:


28

Bence değişiklikleri yanlış anladın.

Kısayol olarak (function ($) { ... })(jQuery);kullanımına izin vermek için JavaScript kodu sarılmalıdır . Bu, jQuery'nin diğer kütüphanelerle güzelce oynamasına izin vermektir . Bu işlevde, değiştirmek isterseniz DOM'nin yüklenmesini beklemeniz gerekir. Kodunuzu yazmak budur .$jQueryjQuery.ready(function(){ ... })

Ama kullanmak yerine jQuery.ready(function(){ ... }), sen gerektiğini davranışları kullanmak Drupal JavaScript kodunuzu süreci şey ilave (istediğini bilen izin veya kaldırılmış DOM).

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

1

Ayrıca, jQuery nesnesinin tamamını, seçtiğiniz gibi başka bir değişkenle diğer adla takmayı da düşünebilirsiniz:

$j = jQuery.noConflict();

Bunu, kapsülleme dışında erişime açık bırakmak için hazır ifadenin dışına koyarsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.