【发布时间】:2011-11-12 11:43:14
【问题描述】:
如何在 Drupal 的下拉列表中添加 onchange 处理程序?下拉列表是使用 hook_form() 添加的。我必须根据 onchange 函数执行一个函数。 有没有办法做到这一点?
【问题讨论】:
标签: drupal drupal-6 drupal-modules
如何在 Drupal 的下拉列表中添加 onchange 处理程序?下拉列表是使用 hook_form() 添加的。我必须根据 onchange 函数执行一个函数。 有没有办法做到这一点?
【问题讨论】:
标签: drupal drupal-6 drupal-modules
你可以像这样添加一个表单:
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() 添加提交功能。
【讨论】:
dropdown 周围的单引号编码为 ' 我想是 check_plain。我该如何避免呢?
这是使用'#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'
),
);
【讨论】:
如果您使用此下拉菜单生成另一个表单域。
然后使用 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...')
)
),
【讨论】:
虽然我确信 Nicholas 现在已经解决了这个问题,但这可能会帮助一些正在寻找解决方案的人。
我正在使用 D7 并将下拉列表周围的单引号编码为 ' 我想是由 >check_plain. > 如何避免这种情况? – Nicholas Tolley Cottrell 6 月 2 日 16:03
我刚刚找到了执行此操作的“Drupal”方式。
第 1 步,使用 drupal_add_js 设置一个包含下拉列表的变量:
drupal_add_js(array('mymodule' => array('varname' => 'dropdown')), 'setting');
第二步,将属性行添加为
'#attributes' => array('onchange' => "form.submit(Drupal.settings.mymodule.varname)"),
【讨论】: