【问题标题】:Drupal 7 - "illegal choice" error for ajaxed select field (not using Drupal FAPI #ajax)Drupal 7 - ajaxed 选择字段的“非法选择”错误(不使用 Drupal FAPI #ajax)
【发布时间】:2012-02-15 08:37:26
【问题描述】:

试图弄清楚在使用非 FAPI ajax 方法替换选择列表时如何解决“检测到非法选择”错误。

示例 在节点创建表单上,选择列表下方有一个链接,可在 ctools 模式窗口中打开自定义表单以添加新值,并且在模式中成功提交表单后,节点表单选择将替换为新值。

  <?php
  if (!empty($form_state['executed'])) {
    // Replace node form select if form submit was successful.
    module_load_include('inc', 'node', 'node.pages');
    $node_form = node_add('photo');
    $new_field = drupal_render($node_form[$field]);
    $output = array();
    $output[] = ajax_command_replace($selector, $new_field);
    $output[] = ctools_modal_command_dismiss();
  }
  print ajax_render($output);

我可以让它工作,直到我提交原始节点表单,我得到一个“非法选择”错误,大概是因为节点表单正在使用缓存的表单值进行验证。 设置 $form_state['rebuild'] = TRUE;修复了非法选择错误,但是节点表单中的图像字段无法正常工作。图像文件被上传并保存到节点,但缩略图、alt 和标题标签不会被 ajaxed 插入)。 Dblog 收到此错误是因为它尝试将数据发布到旧表单 ID(预重建)。

location: file/ajax/field_image/und/0/form-DSbMdFlKNDaAJSFY4fVIHkcg2eMCDqYZHUfitCnR0VA
message: Invalid form POST data.

是否有更好的方法来替换选择列表以避免“非法选择”错误,或者我应该检查 $form_state['rebuild'] 是否存在文件模块错误?作为一种可能的替代方法,我找不到任何关于如何从另一个表单触发 $form #ajax 事件的文档。不确定这是否可能。 任何指导将不胜感激。

【问题讨论】:

    标签: ajax drupal-7 modal-dialog drupal-ctools


    【解决方案1】:

    在节点表单选择字段中,添加'#validated' =&gt; TRUE。您必须在自定义模块中更改节点形式:

    mymodule_form_photo_node_form_alter (& $form, & $state)
    {
      // Replace 'field_name' with whatever the name of the select field is
      $form['field_name']['#validated'] = TRUE;
    }
    

    我看到这个问题是在一年前提出的,但希望这可以帮助其他人寻找答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-07-06
      相关资源
      最近更新 更多