阻止自定义提交按钮触发 CCK 表单上的表单验证

发布于 2024-07-25 13:51:59 字数 546 浏览 7 评论 0原文

我使用 hook_form_alter 在 CCK 表单上的字段组内添加了一个提交按钮,如下所示:

function mymodule_form_alter(&$form, $form_state, $form_id) {

  if ($form_id == 'object_node_form') {

   $form['group_wikipedia']['search'] = array(

 '#type' => 'submit',
 '#value' => t('Search Wikipedia'),
 '#name' => 'searchwiki',
 '#submit' => array('mymodule_searchwiki_submit'),
   );

  }
}

当我按下按钮时,完整表单的验证处理程序例如。 检查必填字段,就像我按下表单末尾的“提交”按钮一样运行。

我认为将 #name 属性从“op”更改为“searchwiki”可以防止这种混淆,但事实并非如此。

有谁知道这个问题的解决方法?

I've added a submit button inside a fieldgroup on a CCK form using hook_form_alter as follows:

function mymodule_form_alter(&$form, $form_state, $form_id) {

  if ($form_id == 'object_node_form') {

   $form['group_wikipedia']['search'] = array(

 '#type' => 'submit',
 '#value' => t('Search Wikipedia'),
 '#name' => 'searchwiki',
 '#submit' => array('mymodule_searchwiki_submit'),
   );

  }
}

When I press the button, the validation handlers for the full form eg. checks for required fields, run as though I have pressed the 'Submit' button at the end of the form.

I thought that changing the #name property from 'op' to 'searchwiki' would prevent this kind of mix-up, but not so.

Does anyone know a workaround for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

琴流音 2024-08-01 13:51:59

我相信无论用户按下哪个提交按钮,整个表单都会被提交。
如果你想制作一个搜索功能,你可以做的是制作一些 AJAX 来获取数据并显示它。 使用 jQuery,您还可以停止表单提交,但在按钮单击函数上返回 FALSE(您可以在 js 中创建)。 不过,您可能无法利用 Drupal 表单 api 的优点。

I believe that the entire form will always be submitted no matter which submit button the user presses.
If you want to make a search function, what you could do, is make some AJAX that fetch the data and display it. Using jQuery you would also be able to stop the form submit, but returning FALSE on the button click function (that you can make in your js). You probably wont be able to use the goodness of the Drupal form api though.

暖心男生 2024-08-01 13:51:59

您可以使用 jQuery 的 event.preventDefault()

http://api.jquery.com/event.preventDefault/

You could use jQuery's event.preventDefault()

http://api.jquery.com/event.preventDefault/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文