我在Drupal中通过ajax将数据填充到选择框时出现问题

时间:2011-07-28 10:06:57

标签: ajax drupal select parent-child

我已经安装了drupal 6,在一种内容类型中添加了一些cck字段。添加了两个选择框字段。 我正在选择父选择框的选定值,并根据该选择使用Ajax将关联选项传递给下一个选择框字段。 (例如Country - > State。当用户选择country时我想将状态值传递给下一个选择框。)

但是当我提交表单时,它会出现以下错误: “已检测到非法选择。请与网站管理员联系。”

我不知道为什么在保存节点时没有采用ajaxified选择框值。 有人有解决方案。有没有解决方案来处理Drupal中的动态选择选项。

提前致谢。

1 个答案:

答案 0 :(得分:1)

同样的事情我正在研究drupal 7及其为我工作。下面是代码。希望这对你有所帮助。我所做的是选择汽车模型汽车变种将改变和数据保存在表格中。

function add_offer_form($ form,$ formstate){

$ form ['add_offer_new_car_model'] = array(

    '#type' => 'select',
    '#required' => TRUE,
    '#options' => $car_model,
    '#ajax' => array(
        'effect' => 'fade',
        'progress' => array('type' => 'none'),
        'callback' => 'variant_callback',
        'wrapper' => 'replace_variant',
    ),
);

//组合框以选择新车变种

$form['add_offer_new_car_variant'] = array(

    '#type' => 'select',
    '#options' => array(),
    // The prefix/suffix provide the div that we're replacing, named by #ajax['wrapper'] above.
    '#prefix' => '<div id="replace_variant">',
    '#suffix' => '</div>',
);

// AJAX请求为每次更改调用表单构建器函数。

//我们可以根据$ form_state更改构建表单的方式。

if (!empty($formstate['values']['add_offer_new_car_model'])) {

    $model_id = $formstate['values']['add_offer_new_car_model'];
    $rows = array();
    $result = db_query("SELECT id, variant_name from {va_car_variant} where car_model_id in ($model_id,1) order by variant_name");
    while ($data = $result->fetchObject()) {
        $id = $data->id;
        $rows[$id] = $data->variant_name;
    }
    $form['add_offer_new_car_variant']['#options'] = $rows;
}

}

/////////////////////////////////////////////// ///////// ///////// AJAX CALL BACK的功能

function variant_callback($ form,&amp; $ form_state){

return $form['add_offer_new_car_variant'];

}