2013-07-02 52 views
1

在我編碼模塊的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"> 
[...] 

什麼我需要改變,以得到這個 上班?

回答

0

我才發現這樣做的「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;

1

你可以用這個嘗試:

'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..... 
}); 
+0

謝謝您的及時答覆。 不幸的是,我嘗試使用\'並得到了相同的結果。 –

+0

我想我的更新答案會幫助你。 @kwfinken –

+0

,你的更新答案有同樣的問題...... drupal不喜歡在onchange中傳遞引用的值。這就是爲什麼你必須通過drupal_add_js設置變量,然後在你的js中使用變量。 –