Drupal:如何在使用AJAX按下“删除”按钮后修改表单ui?

时间:2010-01-17 20:54:00

标签: ajax drupal-6 drupal-webform

我正在使用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如何知道这个特定功能呢?

1 个答案:

答案 0 :(得分:1)

您可以检查通过AJAX发出的返回值,如果移除成功,您可以在移除按钮上执行display: none

查看AJAX模块文档,我认为您需要实现Drupal.Ajax.plugins.FOO(hook, args)。在hook == complete时,您可以将按钮设置为display: none