Оформление JS-скрипта по стандартам Drupal и через Behaviors.

Главные вкладки

Аватар пользователя Lord of Cats Lord of Cats 19 апреля 2018 в 9:34

Добрый день.

Подскажите, пожалуйста, как оформить JS-скрипт по стандартам Drupal:

function myfunc() {
    alert('Input change!');
    jQuery(document).unbind('ajaxSuccess', myfunc);
}
function eventChangeInput() {
    jQuery('input').live('change', function () {
        jQuery(document).bind('ajaxSuccess', myfunc);
    });
}
jQuery(document).ready(function () {
    eventChangeInput();
});

Лучший ответ

Аватар пользователя ivnish ivnish 19 апреля 2018 в 10:13
(function ($) {

  'use strict';

  Drupal.behaviors.НАЗВАНИЕ = {
    attach: function (context, settings) {
      // тут ваш код
    }
  };

})(jQuery);

1) Не используйте ключевое слово jQuery внутри, используйте $.
2) Не используйте (document).ready, он будет вызываться автоматически при каждом вызове вашего бихейвиора
3) Я вам уже писал в личке, что загляните в js-файлы модулей ядра (или контрибные), посмотрите как написан код там
4) Ну и желательно подключать ваш js файл только на тех страницах, где он реально нужен

Комментарии

Аватар пользователя ivnish ivnish 19 апреля 2018 в 10:13
(function ($) {

  'use strict';

  Drupal.behaviors.НАЗВАНИЕ = {
    attach: function (context, settings) {
      // тут ваш код
    }
  };

})(jQuery);

1) Не используйте ключевое слово jQuery внутри, используйте $.
2) Не используйте (document).ready, он будет вызываться автоматически при каждом вызове вашего бихейвиора
3) Я вам уже писал в личке, что загляните в js-файлы модулей ядра (или контрибные), посмотрите как написан код там
4) Ну и желательно подключать ваш js файл только на тех страницах, где он реально нужен

Аватар пользователя Lord of Cats Lord of Cats 20 апреля 2018 в 14:40

Получается как то так:

(function ($) {
  'use strict';
  Drupal.behaviors.eventChangeInput = {
    attach: function () {
      $('input').live('change', function () {
        $(document).bind('ajaxSuccess', function () {
          alert('Input change!');
          $(document).unbind('ajaxSuccess', this);
        });
      });
    }
  };
})(jQuery);

Но не уверен, что это правильно.