كما يوضح العنوان ، أتساءل كيف أقوم بملء حقل نص ديناميكيًا باستخدام رد اتصال [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'];
}
بعد العبث بهذا لفترة ، اكتشفت أنني بحاجة إلى إلغاء تعيين حقل النص. بمجرد أن بدأت هذه القيمة الافتراضية في العمل مع 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'];
}