2011-10-07 60 views
1

我使用hook_form_alter添加一个按钮,一个WebForm:添加按钮WEBFORM - 问题:做提交,而不是Ajax回调

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

我可以设置一个jQuery。点击()模块中,但可以” t获取Ajax回调来执行。当按钮作为模块的一部分添加到表单时(即,如果它是mymodule_form),但在mymodule_form_alter中添加到网络表单时,它将执行提交而不是回调。

如何获得ajax回调来执行Ajax,而不是提交

回答

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, 
      ); 
0

由于drupal doc states it “#executes_submit_callback” 不会阻止页面发送POST请求。

要做到这一点,你需要添加自定义属性,如:

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