[РЕШЕНО] Как прикрутить события к single-line textfield ?

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

Аватар пользователя kissfm kissfm 15 февраля 2009 в 17:14

(Вообще-то этот вопрос касается всех типов полей в Profile)
Создаю поля для профайла пользователя. Возникла потребность сделать 2 поля зависимых друг от друга. Т.е. - вводим число в первое поле в кг, а вдругом высвечивается пересчитанное на фунты.
К полю ввода привязать OnChange.
Вручную это сделать - раз плюнуть. А как это внедрить в систему Drupal?

Комментарии

Аватар пользователя neochief neochief 15 февраля 2009 в 18:38

самый простой способ — цепляете в тему файл скриптов, в нем пишете примерно следующее:

// jQuery обработчик загрузки страницы
$(document).ready(function(){

  // jQuery обработчик OnChange
  $('#your_field_id').change(function(){
    this_val = $(this).val();
    $('#another_field_id').val(kg_to_pounds(this_val));
  });

});

function kg_to_pounds(kg) {
  //....
  return pounds;
}

Есть еще варианты, как то модификция формы через hook_form_alter или что-нибудь другое, но и этого способа вам вполне хватит.

Как вцепить файл в тему? В теме найти info файл, в нем добавить строку
scripts[] = 'scripts/my.js'

Там же создать папку scripts и в ней файлик my.js, в котором и прописать код, который дан выше. После этого почистить кеш друпала в Настройках сайта » Производтельность (там кнопка внизу), и скрипт должен подхватится.

Аватар пользователя kissfm kissfm 15 февраля 2009 в 19:29

Не получилось.
Я написал параметр name полей:
profile_weight_kg ('#profile_weight_kg')
profile_weight_pounds ('#profile_weight_pounds')
id у них - 33 и 34.
Или всё-таки id нужно вписать? ('#33' и '#34')
Кеш тоже очистил /settings/performance
И нужен ли модуль JQ?

Аватар пользователя neochief neochief 16 февраля 2009 в 0:01

посмотрите фаербагом или в сорце страницы, какие конкретные айдишники имеют поля на форме профиля. Исходя из этих данных, пропишите в скрипт корректные селекторы. Модуль не нужен — джейквери в ядре.

Аватар пользователя kissfm kissfm 16 февраля 2009 в 15:17

Теперь все прошло без шума и пыли.
Еще раз большое спасибо, это ценные знания. Теперь уже и это смогу от себя добавлять в код.