Drupal 7 Forms API - AJAX Forms 错误:检测到非法选择。请联系网站管理员

2024-02-15

我设置了一个表单,用户可以从下拉列表中选择一个项目。一旦选择该项目,就会填充另一个下拉列表。然后,根据从第二个下拉列表中选择的值,可能会或可能不会显示字段集。如果显示字段集,则有一个字段和一个按钮。通过单击该按钮,您可以添加同一字段的另一个副本。一旦有多个,也会出现“删除一个”按钮。我从这里得到了代码的基础:http://api.drupal.org/api/examples/ajax_example%21ajax_example_graceful_degradation.inc/function/ajax_example_add_more/7 http://api.drupal.org/api/examples/ajax_example%21ajax_example_graceful_degradation.inc/function/ajax_example_add_more/7

问题是,当我第一次单击“添加另一个调查问题”时,它工作正常并添加一个字段。当我第二次单击它或当我单击删除(现在有两个)时,我收到此错误:“检测到非法选择。”请联系网站管理员。'

我究竟做错了什么?

这是我的代码:

function touchpoints_addmetric_form($form, &$form_state, $tp_id) {
    $selectedType = isset($form_state['values']['type']) ? $form_state['values']['type'] : FALSE;
    $types = db_query('SELECT * FROM {touchpoints_metric_types}') -> fetchAllKeyed(0, 1);
    $form['#tree'] = TRUE;
    $form['type'] = array(
        '#type' => 'select',
        '#title' => t('Metric Type'),
        '#options' => $types,
        '#required'=>TRUE,
        '#ajax' => array(
            'event' => 'change',
            'wrapper' => 'method-wrapper',
            'callback' => 'touchpoints_method_callback'
        )
    );
    $form['measurementmethod'] = array(
        '#type' => 'select',
        '#title' => t('Measurement Method'),
        '#required'=>TRUE,
        '#prefix' => '<div id="method-wrapper">',
        '#suffix' => '</div>',
        '#options' => _get_methods($selectedType)
    );
    $form['survey'] = array('
        #type' => 'fieldset',
        '#collapsible' => FALSE,
        '#states' => array(
            'visible' => array(
                array(
                    array(':input[name="measurementmethod"]' => array('value' => '5')), 
                    'xor', 
                    array(':input[name="measurementmethod"]' => array('value' => '6')),
                    'xor', 
                    array(':input[name="measurementmethod"]' => array('value' => '7'))
                )
            )
        )
    );
    $form['survey']['contents'] = array(
        '#type' => 'fieldset',
        '#collapsible' => FALSE,
        '#prefix' => '<div id="survey-div">', 
        '#suffix' => '</div>', 
    );
    if (empty($form_state['num_surveys'])) {
        $form_state['num_surveys'] = 1;
    }
    for ($i = 1; $i <= $form_state['num_surveys']; $i++) {
        $form['survey']['contents']['survey_question'][$i] = array(
            '#type' => 'textfield',
            '#title' => t('Survey Question ' . $i),
            '#size' => 70, '#maxlength' => 100, 
        );
    }
    $form['survey']['contents']['addsurvey'] = array(
        '#type' => 'submit',
        '#value' => t('Add Another Survey Question'),
        '#submit' => array('touchpoints_metrics_survey_add_one'),
        '#limit_validation_errors' => array(),
        '#ajax' => array(
            'callback' => 'touchpoints_metrics_survey_callback', 
            'wrapper' => 'survey-div', 
        ), 
    );
    if ($form_state['num_surveys'] > 1) {
        $form['survey']['contents']['removesurvey'] = array(
            '#type' => 'submit',
            '#value' => t('Remove A Survey Question'),
            '#submit' => array('touchpoints_metrics_survey_remove_one'), 
            '#limit_validation_errors' => array(), 
            '#ajax' => array(
                'callback' => 'touchpoints_metrics_survey_callback', 
                'wrapper' => 'survey-div', 
            ), 
        );
    }
    return $form;
}

function _get_methods($selected) {
    if ($selected) {
        $methods = db_query("SELECT * FROM {touchpoints_m_methods} WHERE mt_id=$selected") -> fetchAllKeyed(0, 2);
    } else {
        $methods = array();
    }
    return $methods;
}

function touchpoints_method_callback($form, &$form_state) {
    return $form['measurementmethod'];
}

function touchpoints_metrics_survey_add_one($form, &$form_state) {
    $form_state['num_surveys']++;
    $form_state['rebuild'] = TRUE;
}

function touchpoints_metrics_survey_remove_one($form, &$form_state) {
    if ($form_state['num_surveys'] > 1) {
        $form_state['num_surveys']--;
    }
    $form_state['rebuild'] = TRUE;
}

function touchpoints_metrics_survey_callback($form, &$form_state) {
    return $form['survey']['contents'];
}

我曾多次遇到此错误,这就是我发现的:

This is Drupal's way of saying "Hey, you tried to submit this form with a , checkbox or radio button option that wasn't included in the original form definition! That's not allowed." - See more at: http://proofgroup.com/blog/2008/jul/debugging_mysterious_illegal_choice_has_been_detected_please_contact_site_administrato#sthash.vDNmqslL.dpuf

也许您应该考虑模块而不是自定义代码条件字段 https://drupal.org/project/conditional_fields

或者解决方法:'#validate' => TRUE source http://anilmaharjan.com.np/blog/2013/02/an-illegal-choice-has-been-detected-in-drupal-select-field-bypass-validation-for-ajax-loaded-options

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Drupal 7 Forms API - AJAX Forms 错误:检测到非法选择。请联系网站管理员 的相关文章

  • 使用 c# 使用 Drupal Rest Api

    我正在努力使用 c 使用 Drupal Rest Api 我正在使用 drupal 7 5 并利用它的其余服务 API 来跟踪各种资源 我已经成功地通过谷歌的邮递员发布了内容 但是当我尝试使用 c 代码复制它时 系统提示我出现禁止错误 匿名
  • 更改 Drupal 7 中的消息

    drupal 中有几条消息 当出现 php 警告时 会引发错误消息 但模块也可以使用 drupal set message 引发消息 问题是 有没有办法改变这些消息 例如 将每条消息中的每个 a 替换为 b Thanks 虽然设置上没有消息
  • Drupal 7:Drupal 7 中动态选择列表的最佳实践

    Drupal 7 中动态选择列表的最佳实践是什么 通过 UI 创建一个带有虚拟选项的字段 并使用以下命令覆盖选项hook form FORM ID alter or 通过自定义模块从头开始创建动态选择列表hook form or 不同的方法
  • Drupal 7 默认 .htaccess

    我正在寻找 Drupal 7 的默认 htaccess 代码 由于某种原因 安装根本没有更新 htaccess 文件并且它是空白的 任何帮助将不胜感激 因为我在任何地方都找不到这个 实际上 Drupal 官方源代码在 GitHub 上 ht
  • Drupal 6 到 7 迁移

    我们有一个用 drupal 6 编写的 drupal 站点 我们知道我们必须为 drupal 7 重写它 大部分 但最重要的部分是迁移数据 CCK migrate 只能迁移大约 90 的田地 我正在寻找一种干净的方法将 drupal 6 数
  • .htaccess 路径只能通过 ip 访问

    我想使用 htaccess 配置阻止来自我的站点的路径 这个想法是只有一组特定的 IP 可以从 URL 访问该特定路径 Note 它是一个路径 而不是页面或目录 我们正在尝试屏蔽 Web 服务 以便仅对 URL 进行后调用 我想要网址exa
  • 在drupal中使用hook_form_alter设置webform组件值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经使用 form alter 函
  • Drupal Commerce Line Items:更改价格?

    我必须向我的购物车添加一些具有自定义金额的订单项 商业产品以价格 0 保存 我的模块计算价格并将订单项添加到购物车 订单中 但我不明白如何以编程方式设置价格 我读过有关使用规则的内容 但我需要我的模块能够设置 更改价格 不调用规则 我尝试过
  • Drupal hook_views_post_execute 没有被调用

    我正在尝试加入hook views post executeDrupal 7 中的事件 我的模块称为foo位于sites default modules features foo My foo module文件包含一个定义hook view
  • Facebook 聊天机器人 - 如何测试欢迎消息?

    我的聊天机器人运行良好 但我在调试欢迎消息功能时遇到了麻烦 因为它仅在发起对话时显示 尽管我很确定在同事手机上尝试过它不起作用 如何重置我的聊天 以便将我视为与之交互的新用户 这是我目前受欢迎的 PHP 脚本
  • 在 drupal 7 中更改管理员密码

    我正在使用内置的 Drupal 7 用户模块 用户注册 忘记密码电子邮件等等 我忘记了我的管理员密码 我可以访问托管在 1and1 com 上的网站 也可以访问 mysql 是否可以通过 SQL 更改密码或电子邮件地址 以便我可以访问管理页
  • Drupal 7 - 将分类插入节点对象

    我有一个可以成功创建新节点的脚本 但我在保存之前设置分类法时遇到问题 我相信在 Drupal 6 中我会使用这种方法 cat1 tid taxonomy get term by name data i cat1 cat2 tid taxon
  • 将 CCK 字段添加到 Drupal 7 中的自定义表单

    Drupal 6 中有一种使用 CCK 的方法可以在我们的自定义表单中附加 CCK 字段 例如 field content fields field name field name is cck field text field text
  • 在 Drupal 7 中上传多个文件

    The 图像场一次只允许上传一个文件 Drupal 7中有支持多重上传的模块吗 上传模块对比 http groups drupal org node 155764 http groups drupal org node 155764 我使用
  • Drupal 7:如何更改图像字段小部件“alt”或标题“标签

    我正在尝试更改节点添加表单上的图像小部件中的 alt 和 标题 标签 我已经尝试过这两个钩子 hook field widget form alter hook form alter 我无法找到需要去哪里才能成功更改标签 有人可以指导我找到
  • 如何在不使用 API 的情况下向 Drupal 6.x 注册用户?

    我们必须有一个通过用 java 编写的 Web 服务可用的 注册 方法 因此从今往后我们无法访问 Drupal API 但我们需要能够成功注册用户 简单地将用户添加到用户表中是行不通的 因为新创建的用户永远无法成功登录 我再次喜欢 Drup
  • 在 drupal 中为自定义块创建自定义模板文件

    创建自定义 tpl 文件来为自定义块设置主题的 drupal 方法是什么 具体来说 我尝试以编程方式创建一个块 然后找到一种方法将视图代码与模块 php 代码分开 如果它是一个页面 Drupal theme 将是实现这一目标的非常有效的方法
  • Drupal 6模块安装文件未在数据库中创建表

    我正在使用 Schema API 在 Drupa 6 17 上为我的模块创建表 但这些表并未在数据库中创建 我安装了架构模块 它告诉我 虽然我的模块的架构被识别 但它的表不在数据库中 它出现在 缺失 下 Tables in the sche
  • 有人知道 Drupal 7 的分面搜索解决方案吗?

    分面搜索模块不会被移动到 Drupal 7 我有什么选择 The 搜索API模块 http drupal org project search api是 Drupal 7 的新增功能 允许您从各种后端中进行选择 包括Solr http dr
  • 将自定义模块创建的内容添加到 drupal 搜索索引中

    我开发了一个模块 可以在不使用 CCK 的情况下为我的网站创建内容 数据将保存在Drupal默认表之外的不同表中 我的要求是 如何让 Drupal 索引我的自定义模块创建的内容 你必须实施钩子搜索 http api drupal org a

随机推荐