1

フォーム API を使用してモジュール内にフォームを作成しています。うまく機能している依存ドロップダウンがいくつかありました。コードは次のとおりです。

$types = db_query('SELECT * FROM {touchpoints_metric_types}') -> fetchAllKeyed(0, 1);
$types = array('0' => '- Select -') + $types;
$selectedType = isset($form_state['values']['metrictype']) ? $form_state['values']['metrictype'] : 0;
$methods = _get_methods($selectedType);
$selectedMethod = isset($form_state['values']['measurementmethod']) ? $form_state['values']['measurementmethod'] : 0;
$form['metrictype'] = array(
    '#type' => 'select',
    '#title' => t('Metric Type'),
    '#options' => $types,
    '#default_value' => $selectedType,
    '#ajax' => array(
        'event' => 'change',
        'wrapper' => 'method-wrapper',
        'callback' => 'touchpoints_method_callback'
    )
);

$form['measurementmethod'] = array(
    '#type' => 'select',
    '#title' => t('Measurement Method'),
    '#prefix' => '<div id="method-wrapper">',
    '#suffix' => '</div>',
    '#options' => $methods,
    '#default_value' => $selectedMethod,
);

_get_methods および touchpoints_method_callback 関数は次のとおりです。

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

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

ファイルフィールドをフォームに追加するまで、これはすべてうまくいきました。そのために使用したコードは次のとおりです。

$form['metricfile'] = array(
    '#type' => 'file',
    '#title' => 'Attach a File',
);

最初のドロップダウンを変更するとファイルが追加されたので、2 番目のドロップダウンの内容をロードすることなく、その横に「お待ちください」というメッセージが表示されてハングします。また、JavaScript コンソールに次のエラーが表示されます。

「キャッチされていない TypeError: オブジェクト関数 (a,b){return new p.fn.init(a,b,c)} にはメソッド 'handleError' がありません」

ここで何が間違っていますか?

4

0 に答える 0