如何在Drupal的下拉列表中添加onchange处理程序?

时间:2011-11-12 11:43:15

标签: drupal drupal-6 drupal-modules

如何在Drupal的下拉列表中添加onchange处理程序?使用hook_form()添加下拉列表。我必须根据onchange功能执行一个功能。 有没有办法做到这一点?

4 个答案:

答案 0 :(得分:7)

您可以添加如下表单:

 hook_form()
 {
   $form1["dropdown"] = array(
    '#type' => 'select',
    '#title' => t('Preview the page with themes available'),
    '#options' => $ptions,
    '#default_value' => 'defalut_value',
    '#attributes' => array('onchange' => "form.submit('dropdown')"),
 );
//Submit button:
$form1['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit '),
        '#attributes' => array('style' => 'display: none;'),
);

现在您可以使用hook_submit()添加提交功能。

答案 1 :(得分:4)

以下是使用'#ajax'属性

的简单示例
$form['select'] = array(
  '#type' => 'select',
  '#title' => 'Option #1',
  '#options' => $option,
  '#ajax' => array(
    // Call function that rebuilt other field
    'callback' => 'ajax_load_field',
    'method' => 'replace',
    // div to be get replace by function output
    'wrapper' => 'chart',
    'effect' => 'fade'
  ),
);

答案 2 :(得分:1)

如果使用此下拉列表生成另一个表单域。

然后使用AHAH。

$form['my_form_submit'] = array(

'#type' => 'submit',

'#value' => t('Submit'),
'#weight' => 1,
'#submit' => array('my_form_submit'),//none JS version
'#ahah' => array(
  'event' => 'click',
  'path' => 'mymodule/js',  //Your ajax function path
  'wrapper' => 'myform-wrapper',
  'method' => 'replace',
  'effect' => 'fade',
  'progress' => array(
    'type' => 'bar',
    'message' => t('Loading...')
  )      
),

答案 3 :(得分:1)

虽然我确信尼古拉斯现在已经过了这个问题,但这可能有助于一些正在寻找解决方案的人。

  

我正在使用D7并将下拉列表中的单引号编码为'我想通过> check_plain。 >我该如何避免? - 尼古拉斯·托利·科特雷尔6月2日16:03

我刚刚找到了“Drupal”的方式。

步骤1,使用drupal_add_js设置变量以包含下拉列表:

drupal_add_js(array('mymodule' => array('varname' => 'dropdown')), 'setting');

步骤2,将属性行添加为

'#attributes' => array('onchange' => "form.submit(Drupal.settings.mymodule.varname)"),