Как правильно добавить атрибут onchange в поле формы в Drupal 7
В модуле я кодирую, у меня есть этот код:
'SelectType' => array(
'#type' => 'select',
'#name' => 'dropdown',
'#options' => drupal_map_assoc(array(
'Keyword-classic','Keyword-Encore','Reserves: Instructor',)),
'#attributes' => array('id' => array('SelectType'),
'onchange' => "change_action('catalogsearch', this.selectedIndex)",
),
),
Это дает такой результат:
[...]
<select id="SelectType"
onchange="change_action('catalogsearch', this.selectedIndex)"
name="dropdown" class="form-select">
[...]
Мне нужно, чтобы он произвел (вывод "вместо" в третьей строке):
[...]
<select id="SelectType" style="float:left;"
onchange="change_action('catalogsearch', this.selectedIndex)"
name="dropdown" class="form-select">
[...]
Что мне нужно изменить, чтобы заставить это работать?
2 ответа
Я только что нашел "Drupal" способ сделать это.
Шаг 1, установите переменную, которая будет содержать раскрывающийся список, используя drupal_add_js:
drupal_add_js(array('mymodule' => array('varname' => 'catalogsearch')), 'setting');
Шаг 2, добавьте строку "onchange" как
'onchange' => 'change_action(Drupal.settings.mymodule.varname, this.selectedIndex)'
Делая это, переменная передается без необходимости '
пройти через систему тем. Система тем всегда вызывает check_plain
по значениям атрибута, поэтому '
или же \'
всегда преобразуется в '
,
Вы можете попробовать это:
'SelectType' => array(
'#type' => 'select',
'#name' => 'dropdown',
'#options' => drupal_map_assoc(array(
'Keyword-classic','Keyword-Encore','Reserves: Instructor',)),
'#attributes' => array('id' => array('SelectType'),
'onchange' => 'change_action(\'catalogsearch\', this.selectedIndex)',
),
),
И, кстати, как ID
является уникальным и только один может быть использован одновременно для элемента, вы должны использовать 'id' => 'SelectType'
вместо 'id' => array('SelectType')
,
Редактировать:
Если приведенный выше код не работает, вы можете использовать jQuery
как следующее:
$("#SelectType").change(function() {
YOUR CODE.....
});