我有一个用例,我将在我的注册表单中使用按钮连接YouTube和Twitter。现在,点击其中任何一个按钮,用户将被重定向到相应社交平台的OAuth授权页面,其逻辑在其他自定义模块中以不同的功能编写。例如,点击注册表单上的“与YouTube连接”按钮,我想要调用自定义函数。这就是我目前代表此表单按钮的方式:

$form['signup_connect_with_youtube_submit'] = array(
    '#type' => 'button',
    '#attributes' => array('onclick' => 'return youtube_form_submit();'),
    '#value' => 'Connect with Youtube',
  );

其中youtube_form_submit()是我想在用户单击此按钮时调用的函数。但是,单击此按钮时,即使我有一个单独的表单提交按钮,也会提交整个表单,而不是仅调用该函数。

如何在我的模块中实现此用例?基本上,我想在我的表单中包含多个按钮,除了主提交按钮,点击哪个按钮不会提交表单,而是调用单独的功能。

评论

Jaypan的头像

$form['submit_button_1'] = array
(
  '#type' => 'submit',
  '#value' => t('Do something'),
  '#submit' => array('submit_button_1_submit'),
);

$form['submit_button_2'] = array
(
  '#type' => 'submit',
  '#value' => t('Do something else'),
  '#submit' => array('submit_button_2_submit'),
);

请注意,通过向按钮添加提交处理程序(函数),单击该按钮时将不会调用默认的_submit()函数。只会调用添加的提交处理程序。

leeuwnhawk的头像

谢谢,这个工作得很好。

Goon3r的头像

值得注意的是,如果两个提交按钮具有相同的#value,则此问题将持续存在。确保它们具有不同的ID和不同的值。

zarabatana的头像

提示非常有用!

adanielyan的头像

我希望我在2天前看到你的评论。我花了两天时间试图在我的代码中找到错误...

priyanka12chavan的头像

谢谢。完全按照要求工作,也节省了时间。

vasanthanand的头像

如果我有一个drupal提交处理程序,如果我在提交属性上添加一个表单操作和javascript,那么我的drupal提交处理程序不会被调用在这种情况下做什么。请帮助我。

Jaypan的头像

这与此主题并不真正相关,因此您应该为此问题打开一个新线程。