我正在尝试提交表单并使用hook_form_submit。
问题是表单是通过ajax显示的,这导致hook_form_submit没有被调用。
$items['ajaxgetform/%'] = array(
'page callback' => 'ajaxgetform',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK
);
function ajaxgetform($form_id) {
drupal_get_form($form_id);
return drupal_json($panel);
}
function_myform_form($form_state) {
$form['myform'] = array(
'#title' => 'myform value',
'#type' => 'textfield',
'#default_value' => 'myform default value'
);
$form['#action'] = url('myurl');
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'submit'
);
$form['#ajaxsubmit'] = TRUE;
return $form;
}
hook_form_alter()
会被调用。
下面没有打电话?
function myform_form_submit($form, $form_state) {
// ...
}
我不确定这是否是一个常见的问题,但我已经被困了几个小时试图让它发挥作用。
如果我删除$form['#action'] = url('myurl');
myform_form_submit()
被调用。但是我得到了一个带有jason脚本的白色屏幕。
答案 0 :(得分:8)
没有hook_form_submit()
。而是使用$form['#submit']
注册提交处理程序。因此,如果您想在提交表单时致电myform_form_submit()
,请添加:
$form['#submit'][] = 'myform_form_submit';
到myform_form()
。有关详细信息,请查看5.x to 6.x form changes和Forms API reference。
答案 1 :(得分:0)
您的表单是否显示在myurl
页面上?为了处理表单提交,将在用作操作的页面上显示(使用drupal_get_form()
)表单。
您也可以尝试将表单#redirect
设置为着陆页网址而不是其#action。这样,表单将提交到其生成URL,但用户在处理后会重定向到目标页面。