タイトルが示すように、AJAXコールバックを「select」フォームフィールドから使用してテキストフィールドに動的に入力する方法を知りたいのですが。
変更するとテキストフィールドにデータが入力される多数のオプションを使用して、選択フォームをテストしようとしています。テキストフィールドの「#default_value
」を設定しようとしましたが、機能していないようです。 「#value
」の設定は機能し、テキストフィールドに表示される情報を取得しますが、これには別の問題があります。次のステップに進んでボタンにデータを保存させようとすると、テキストフィールドの値は設定したままになり、変更されません。つまり、選択フォームでオプションを選択すると、テキストフィールドが正しく入力されますが、テキストフィールドを変更して[保存]をクリックすると、$form_state
の値は、変更した値ではなく、 。私がやろうとしていることは可能ですか?
$form['profiles'] = array(
'#type' => 'select',
'#title' => 'Profiles',
'#options' => $profiles,
'#ajax' => array(
'callback' => 'profile_callback',
'wrapper' => 'profile-wrapper'
)
);
$profile = isset($form_state['values']['profiles']) ?
_get_profile_info($form_state['values']['profiles']) : NULL;
$form['profile_name'] = array(
'#type' => 'textfield',
'#prefix' => '<div id="profile-wrapper">',
'#suffix' => '</div>',
'#title' => 'Profile Name',
'#value' => $profile == NULL ? '' : $profile[0]->{'name'}
);
$form['profile_save'] = array(
'#type' => 'submit',
'#value' => t('Save Profile'),
'#submit' => array(
'save_profile'
)
);
テキストフィールドの値を$form_state
からテスト用にファイルに保存しています。
function save_profile($form, &$form_state){
$fh = fopen('C:\out.txt', 'w+');
fwrite($fh, $form_state['values']['profile_name']);
}
function profile_callback($form, &$form_state){
return $form['profile_name'];
}
しばらくこれをいじった後、私はテキストフィールドの設定を解除する必要があることに気付きました。このdefault_valueを実行すると、ajaxで動作するようになりました。以下は、最終的なコードです。
unset($form_state['input']['profile_name']);
$form['profiles'] = array(
'#type' => 'select',
'#title' => 'Profiles',
'#options' => $profiles,
'#ajax' => array(
'callback' => 'profile_callback',
'wrapper' => 'profile-wrapper',
),
);
$profile = isset($form_state['values']['profiles']) ? _get_profile_info($form_state['values']['profiles']) : NULL;
$form['profile_name'] = array(
'#type' => 'textfield',
'#prefix' => '<div id="profile-wrapper">',
'#suffix' => '</div>',
'#title' => 'Profile Name',
'#default_value' => $profile == NULL ? '' : $profile[0]->{'name'},
);
@Satharielする必要はないと思いますunset($form_state['input']['profile_name']);
これは私のために働くので、私がそれを機能させるために私がすることです:
$form['profiles'] = array(
'#type' => 'select',
'#title' => 'Profiles',
'#options' => $profiles,
'#ajax' => array(
'callback' => 'profile_callback',
'wrapper' => 'profile-wrapper',
'event' => 'change',
),
);
$form['profile_name'] = array(
'#type' => 'textfield',
'#prefix' => '<div id="profile-wrapper">',
'#suffix' => '</div>',
'#title' => 'Profile Name',
);
function profile_callback($form, &$form_state){
$form['profile_name']['#value'] = _get_profile_info($form['profiles']['#values']);
return $form['profile_name'];
}