向Webform添加按钮 - 问题:执行提交,而不是Ajax回调

时间:2011-10-07 11:34:09

标签: ajax drupal-7 drupal-hooks

我正在使用hook_form_alter向webform添加一个按钮:

$form['submit_ajaxSearch'] = array(
                '#type' => 'button',
                '#ajax' => array(
                    'action' => 'click',
                    'callback' => 'search_callback',
                    'wrapper' => 'confirm',
                    'method' => 'replace',
                    'name' => 'search',
                ),
                '#value' => t('Address Lookup'),
            );

我可以在模块中设置jQuery .click(),但是无法执行Ajax回调。当按钮作为模块的一部分添加到表单时(即,如果它是mymodule_form),它可以工作,但是当添加到mymodule_form_alter中的webform时,它正在执行提交而不是回调。

如何获取执行Ajax的ajax回调,而不是提交

2 个答案:

答案 0 :(得分:1)

由于Drupal创建了一个“提交”按钮,即使你只需要一个简单的按钮,你也必须指定drupal你不希望按钮执行提交回调。 您可以通过为该按钮将“#executes_submit_callback”设置为false来执行此操作。

例如:

           $form['submit_ajaxSearch'] = array(
                '#type' => 'button',
                '#ajax' => array(
                    'action' => 'click',
                    'callback' => 'search_callback',
                    'wrapper' => 'confirm',
                    'method' => 'replace',
                    'name' => 'search',
                ),
                '#value' => t('Address Lookup'),
                '#executes_submit_callback' => FALSE,
            );

答案 1 :(得分:0)

作为drupal doc states it," #ecutive_submit_callback"不会阻止页面发送POST请求。

为此,您必须添加自定义属性,如:

#attributes' => array('onclick' => 'return (false);')