質問: '1'){ // 野菜が選択された場合 $('#form_food').append($('').val('1').text('1:にんじん')); $('#form_food').append($('').val('2').text('2:玉ねぎ')); $('#form_food').append($('').val('3').text('3:じゃがいも')); }else{ // 果物が選択された場合 $('#form_food').append($('').val('4').text('4:りんご')); $('#form_food').append($('').val('5').text('5:バナナ')); $('#form_food').append($('').val('6').text('6:オレンジ')); } } ``` ### 質問
回答: 主な流れを次のようにしました。 1. POST送信された値を、コントローラからビュー経由でjavaScriptに渡す。 2. javaScriptでフィールドの項目を生成してから、渡された値を設定する。 具体的には、下記のように修正したところ上手く動きました(差分を+-で示します)。 #### コントローラ ``` + // javaScriptで再設定するためにビューに渡す変数 + $food = (Input::post('food')) ? Input::post('food') : '1'; // ビューを生成 $view = View::forge('home'); $view->set_global('form', $form->build(''), false); + $view->set_global('food', $food); return $view; ``` #### ビュー ``` - +'script_id','food'=>$food)); ?> ``` #### javaScript ``` $(function(){ // 初期処理 - if($('#form_food').val() === null){ - set_options('1'); // 空の場合は野菜のoptionを設定 - } + init(); // 種類フィールドが変更された時の処理 /* 〜中略〜 */ }); +function init() +{ + // 選択された値を取得 + var food = $('#script_id').attr('food'); + var type = $('#form_type').val(); + + // 選択された値に基づきセレクトボックスの値を設定 + set_options(type); + $('#form_food').val(food); +} ```