Как правильно добавить атрибут 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(&#039;catalogsearch&#039;, this.selectedIndex)"
    name="dropdown" class="form-select">
[...]

Мне нужно, чтобы он производил (вывод 'вместо' в третьей строке):

[...]
<select id="SelectType" style="float:left;" 
    onchange="change_action('catalogsearch', this.selectedIndex)"
    name="dropdown" class="form-select">
[...]

Что мне нужно изменить, чтобы заставить это работать?


person Kevin Finkenbinder    schedule 02.07.2013    source источник


Ответы (2)


Вы можете попробовать с этим:

    '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.....
});
person Omar Faruk Sharif    schedule 02.07.2013
comment
Спасибо за быстрый ответ. К сожалению, я попытался использовать \' и получил тот же результат. - person Kevin Finkenbinder; 02.07.2013
comment
В вашем обновленном ответе была та же проблема ... drupal не любит передавать значения в кавычках внутри onchange. Вот почему вам нужно установить переменную через drupal_add_js, а затем использовать переменную в вашем js. - person Kevin Finkenbinder; 29.07.2013

Я только что нашел способ "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 для значений атрибутов, поэтому ' или \' всегда преобразуются в &#039;.

person Kevin Finkenbinder    schedule 03.07.2013