Как использовать Drupal.behaviors?

Я пытаюсь сделать простой запрос ajax, когда документ готов. Наряду с этим, я также хочу предоставить функцию, которая является событием onclick.

Вот мой код:

(function ($) { Drupal.behaviors.user_alert_get_message = { attach: function(context, settings) { $.ajax({ type: "GET", url: "/admin/user-alert/get-message", success: function(data){ $('div#block-user-alert-user-alert').html(data); } }); $('div.user-alert-close a', context).click(function() { alert(1); }); } }; }(jQuery)); 

Функция клика не срабатывает. Ajax делает. Что я могу обернуть ajax так, чтобы он делал это только при загрузке страницы, или, предположительно, через attach?

Я также попробовал onclick в теге a, но Firebug сказал, что функция не определена, даже если она была определена как функция (имя функции) в файле .js.

Редактировать:

Если у вас есть событие click, которое принимает аргумент, как я могу передать это?

Solutions Collecting From Web of "Как использовать Drupal.behaviors?"

Как я понял, привязка Drupal.behaviors позволит .click запускать элемент, созданный в любое время. Но на всякий случай я попытался бы использовать .delegate() , как в

 $('body').delegate('div.user-alert-close a', 'click', function() { alert(1); }); 

Что такое поведение Drupal?

Короче говоря, Drupal.behaviors является более модульным и лучшим способом реализации jQuery.ready. В отличие от jQuery.ready, который запускается только один раз, когда DOM готов к обработке, Drupal.behaviors можно запускать несколько раз во время выполнения страницы. Более того, они могут запускаться всякий раз, когда в документ вставляются новые элементы DOM (то есть содержимое, управляемое AJAX).

Drupal.behaviors также может переопределять или даже расширять существующее поведение. Например, если поведение модуля добавляет эффект отскока ко всем ссылкам, другой модуль может заменить это поведение другим эффектом отскока.

Еще один дополнительный бонус Drupal.behaviors (начиная с Drupal 7) – это возможность использовать drupal_add_js (PHP) или Drupal.settings.modulename (JS) и передать настройки как второй параметр (первый из которых является контекстом) для поведения ,

Для получения дополнительной информации см. Следующие ресурсы:

  • Друпал-поведение
  • API-интерфейс Drupal для JavaScript
  • Изменения в Drupal JS API для D7

Лучшие практики для этого:

 $ ('. yourClassElement'). once ('behaviorsName'). click (function () {
     console.log ( 'Cliqued');
 });