Answers:
您必须使用中triggering_element
的$form_state['triggering_element']
。
最佳做法是#name
为按钮定义属性,以便可以在中使用此值triggering_element
。
例如:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
如果未定义,则此属性triggering_element
将保留按钮的属性#value
(用户可以阅读的文本),但是不建议这样做,因为其他模块可能会更改此值或被本地化更改。
您也可以使用$form_state['clicked_button']
,但已弃用。
您可以在drupal_build_form函数文档页面上阅读更多信息。
$form_state['clicked_button']['#value']
会告诉您在表单上单击了哪个按钮。
$form_state['clicked_button']['#value']
:)
比较$form_state
我在Drupal 6中所做的这些值,在Drupal7中也是如此
if($form_state['values']['ok'] == $form_state]['clicked_button']['#value']){
//Process if OK is pressed
}else if($form_state['values']['cancel'] == $form_state]['clicked_button']['#value']) {
//Process if Cancel is pressed
}
使用#name
属性命名按钮,如下所示:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
然后使用:
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
对于那些仍然想弄清楚如何访问触发事件的人,这里是Drupal 8解决方案。
$form_state->getTriggeringElement()
这将返回触发提交元素的数组。如果添加名为的标记,#name
则可以通过以下方式访问它。
$button_clicked = $form_state->getTriggeringElement()['#name']
进行此更改的原因在于,FormStateInterface
现在是一个readOnly
文件,其中只有扩展的类FormStateInterface
才能访问变量。因此,您必须使用类似getTriggeringElement()
访问器的方法才能访问变量。
Drupal 8.6.7
创建按钮如下所示。
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
在您的Submit函数中,获取按钮名称,如以下代码所示。
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
比较可以像
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
#Drupal8
hook_submit()
还是表单提交处理程序?表单提交处理程序不是的实现hook_submit()
。