我使用的Drupal 6和已安装的AJAX模块。我有以下代码:

function remove_manufacturer_role_form($form_state) {
  $form['#ajax'] = array(
    'enabled' => TRUE
  );
  $form['hidden'] = array('#type' => 'value', '#value' => 'is_it_here');
  $form['submit'] = array('#type' => 'submit', '#value' => t('Remove yourself as manufacturer'));
  return $form;
}

function remove_manufacturer_role_form_submit($form, &$form_state) {
     $current_vars = ogrolerequestmanufacturerblock_get_current_vars();

     if( $current_vars )
     {
    $curr_gid = $current_vars['current_gid'];
    $curr_uid = $current_vars['current_user_id'];
    $delete_query = "DELETE FROM {og_users_roles} WHERE rid in (SELECT rid FROM {role} WHERE name='Manufacturer') AND uid=$curr_uid AND gid=$curr_gid";
    if( db_query($delete_query) )
        drupal_set_message("You successfully removed yourself as a manufacturer from this project");
     }
}

基本上,我有一个表格,以除去一个用户作为一个项目内的制造商。用户必须自行拆除的能力。这种形式允许用户点击一个按钮,这反过来使用AJAX提交表单,删除用户从数据库制造商的角色,并通知用户是否成功与否。它成功地使得使用AJAX调用,并删除像它应该的角色,但形式仍然有它显示的删除按钮。如果用户点击一次按钮就给出了一个错误B / C没有要删除。这是确定的,我猜,B / C它不是一个致命错误,并没有真正影响什么......但是,这不是漂亮的用户。

有一种方法我可以刷新模块的块或修改的形式,一旦它被提交时显示?

修改

这似乎是一个很好的解决方案,但我不能完全似乎得到它的工作。我已经包括了delete.js的javascript我模块中:

/**
 * Ajax Forms plugin for ogrolerequestmanufacturerblock 
 *
 * @param {String} hook
 * @param {Object} args
 * @return {Bool}
 */

Drupal.Ajax.plugins.ogrolerequestmanufacturerblock = function(hook, args) {
alert('it got into javascript!');
    if (hook === 'submit') {
        alert('submit called within javascript!');
    }
    return true;
}

它似乎永远不会进入这个javascript函数。如何Drupal的知道调用这个特异功能?

有帮助吗?

解决方案

您可以检查通过AJAX,如果去除传来的返回值是成功的,您可以删除按钮做display: none

纵观AJAX模块文件,我想你会需要实现Drupal.Ajax.plugins.FOO(hook, args)。当hook == complete,您可以设置按钮display: none

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top