मैं एक फॉर्म बना रहा हूं, जो फॉर्म एपीआई '#ajax'विशेषता का उपयोग करता है , और मुझे $form_stateAJAX- सक्षम बटन दबाने पर परिवर्तन करने की आवश्यकता है। यहाँ मुझे क्या मिला है:
मेरे प्रपत्र बिल्डर फ़ंक्शन के अंदर:
...
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
...
और यहाँ कॉलबैक फ़ंक्शन है:
function my_module_settings_ajax($form, $form_state) {
// Make a change to $form_state
if ($form_state['some_fieldset']['add_more']) {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
return $form['some_fieldset'];
}
$form_stateकॉलबैक समाप्त होने के बाद मैंने जो बदलाव किया है, वह खो जाता है। क्या $form_stateइस फ़ंक्शन में कोई बदलाव करने का कोई तरीका है , या इसके बजाय मुझे किसी अन्य फ़ंक्शन का उपयोग करना चाहिए?
संपादित करें
जैसा कि यह पता चला है, इस तर्क को करने के लिए कॉलबैक गलत जगह है। इसके बजाय, फॉर्म बिल्डर फ़ंक्शन के शीर्ष पर, मैंने इसे जोड़ा:
// Respond to AJAX-triggger:
// Add new row
if ($form_state['triggering_element']['#name'] == 'add_more') {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
बेशक, मुझे बटन को नाम देना था:
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#name' => 'add_more', // <-- Right here
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
और अब यह काम करता है!