Pt, 06/12/2017 - 16:53 By Umit
drupal javascript

JavaScript olay işleyicilerinin birden fazla bağlanmasını önleme

Drupal davranışlarında olay dinleyici işlevlerini kullanırsanız, Ajax isteklerini çalıştırdıktan sonra işleyicilerin çoğaltılmasını önlemek için .once () function kullanın. Bu örnekte, bir düğme öğesi tıklatıldığında bir paragraf arasında geçiş yapılır ve hiçbir şey çalıştırmazsanız iyi çalışır. Ajax aynı sayfada istekte bulunur. Ancak bunu yaparsanız, Drupal.behaviors düğmeye yeniden basıp tıklama dinleyicisi birden çok kez eklenecektir. Dolayısıyla paragraf birden çok kez değiştirilecektir.

Drupal.behaviors.magnec_custom = {
    attach: function (context, settings) {
      $('button').click(function() {
        $("p").toggle();
      });
    }
  };

Drupal, paragrafın birden çok kez geçiş yapmasını önlemek için Drupal 7'de beri kendi çekirdeğinde jQuery eklentisini bütünleştirdiği için kodunuzu şu şekilde değiştirin:

Drupal.behaviors.magnec_custom = {
    attach: function (context, settings) {
      $('button').once().click(function() {
        $("p").toggle();
      });
    }
  };

Şimdi, tıklama dinleyicisi öğe düğmesine yalnızca bir kez eklenecek ve JavaScript davranışlarında çoğaltılamayı engelleyeceksiniz. Alternatif çözüm Bu sorunu çözmenin bir başka yolu, öğeye olay dinleyicisi işlevi eklemeden önce unbind işlevini çalıştırmaktır. Örneğin:

Drupal.behaviors.magnec_custom = {
    attach: function (context, settings) {
      $('button').unbind("click");
      $('button').click(function() {
        $("p").toggle();
      });
    }
  };

Başka örnekleriniz varsa, bunları bizimle paylaşabilirsiniz.