基于Ajax的多选下拉列表不能与文件字段一起使用 - drupal 7

时间:2015-07-21 12:11:45

标签: php drupal-7 drupal-modules

我已将一个文件上传字段添加到我的节点,我正在自定义模块中编辑节点表单,如下面的代码所示。

表单中有一个基于ajax的依赖下拉字段。选择单个值后,依赖下拉列表可以正常加载。 但是当我从下拉列表中选择多个值时,我收到以下错误:

  

检测到非法选择。请联系该网站   管理员

由于文件上传字段,我收到此特定错误。当我删除它时,表单工作正常。

到目前为止,我还没有找到解决这个问题的线索。

我的代码如下: -

<?php
function my_module_form_alter(&$form, &$form_state, $form_id) {
    global $user;
    switch ($form_id) {
        case 'my_node_node_form':
            form_load_include($form_state, 'inc', 'node', 'node.pages');
            $country_list = load_countries();
            $selected_country = isset($form_state['values']['course_country']) ? $form_state['values']['course_country'] : key($country_list);
            $form['course_country'] = array(
                '#type' => 'select',
                '#title' => t('Select Your Country'),
                '#weight' => 11,
                '#options' => $country_list,
                '#default_value' => $selected_country,
                '#ajax' => array(
                    'callback' => 'city_dropdown_callback',
                    'wrapper' => 'city_wrapper_list',
                ),
                '#multiple' => TRUE,
                '#required' => TRUE,
            );

            $form['course_country_region'] = array(
                '#type' => 'select',
                '#title' => t('Select Your City'),
                '#weight' => 12,
                '#prefix' => '<div id="city_wrapper_list">',
                '#suffix' => '</div>',
                '#options' => load_cities($selected_country),
                '#multiple' => TRUE,
                '#required' => TRUE,
            );

            unset($form['field_upload_resouces']);
            break;
    }
}


function city_dropdown_callback($form, $form_state) {
    return $form['course_country_region'];
}


function load_countries(){
    $sel_query = db_select('country', 'cd');
    $sel_query->fields('cd');
    $result = $sel_query->execute();
    while ($data = $result->fetchAssoc()) {
        $country_list[$data['id']] = $data['name'];
    }
    return $country_list;
}


function load_cities($country_id) {
    $region_list = array('any' => 'Any');

    $sel_query = db_select('city', 'cd');
    $sel_query->fields('cd');
    if(is_array($country_id)){
       $sel_query->condition('cd.country_id', $country_id, 'IN');
    }else{
        $sel_query->condition('cd.country_id', $country_id);    
    }

    $result = $sel_query->execute();
    while ($data = $result->fetchAssoc()) {
        $city_list[$data['id']] = $data['name'];
    }

    return $city_list;
} 

1 个答案:

答案 0 :(得分:2)

我有类似的问题,我通过将jquery.form.js更新到最新版本来解决。

请参阅链接https://www.drupal.org/node/153774#comment-9202403了解详情。