Как поженить jQuery и Hierarchical select?

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

Аватар пользователя direqtor direqtor 12 августа 2011 в 10:29

Надо проделать на странице кое какие действия в зависимости от выбранного значения в Hierarchical select поле.

Пишу, что-то вроде:

$(document).ready(function(){
  $("#edit-tid-category-hierarchical-select-selects-0").change( function(){
    alert($("#edit-tid-category-hierarchical-select-selects-0 option:selected").val());
  })
});

На свежезагруженной странице все проходит на ура. При изменении пункта в селекте функция срабатывает. А вот при дальнейших изменениях не хочет, хотя на простом селекте все в порядке. Понятно, что в самом Hierarchical select назначаются свои обработчики события, они и перекрывают мой.

Не силен в jQuery. Подскажет кто-нибудь, что делать? Чтобы и моя функция отрабатываля и функции модуля не тронуть.

UPD: Всем спасибо за наводку.
Проблему решил так:

Drupal.behaviors.categoryHierarchicalSelect = function(context) {
  $('#edit-tid-category-hierarchical-select-selects-0', context).change(function () {
    alert($("#edit-tid-category-hierarchical-select-selects-0 option:selected").val());
  });
};

Справка - http://drupal.org/node/304258

Комментарии

Аватар пользователя q2_faith q2_faith 12 августа 2011 в 12:24

"glu2006" wrote:
Через behavior свой js делаешь? или просто document.ready ?

если мне память не изменяет, то там больше проблема с JS HS'а

Аватар пользователя Crea Crea 12 августа 2011 в 12:53

Во-первых, убедитесь, что вставляете через behavior
Во-вторых, у HS есть куча своих событий, которые можно (нужно ?) использовать.

Аватар пользователя kyky kyky 12 августа 2011 в 18:00

Для ТС:
behaviors -- это список событий (функций), которые будут вызваны при загрузке страницы.
Если повесить на document.ready что-то свое, то затрете бихевиры.
Нужно определить свой и приаттачить его к behaviors.

Аватар пользователя Crea Crea 12 августа 2011 в 18:19

Не совсем так. При загрузке новых элементов (а при обновлении HS происходит именно это) ваш скрипт не подключается к ним, потому что document.ready событие не происходит. При использовании behaviors Друпал их сам переподключает

Аватар пользователя direqtor direqtor 15 августа 2011 в 8:16

Всем спасибо за наводку. Проблему решил так:

Drupal.behaviors.categoryHierarchicalSelect = function(context) {
  $('#edit-tid-category-hierarchical-select-selects-0', context).change(function () {
    alert($("#edit-tid-category-hierarchical-select-selects-0 option:selected").val());
  });
};

Справка - http://drupal.org/node/304258