Как правилно да добавя атрибут 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