function ajax_example_wizard($form, &$form_state, $no_js_use = FALSE) { $form['#prefix'] = '<div id="wizard-form-wrapper">'; $form['#suffix'] = '</div>'; $form['#tree'] = TRUE; // We want to deal with hierarchical form values. $step = empty($form_state['storage']['step']) ? 1 : $form_state['storage']['step']; $form_state['storage']['step'] = $step; switch ($step) { case 1: $form['step1'] = array( '#type' => 'fieldset', '#title' => t('Step 1: Personal details'), ); $form['step1']['name'] = array( '#type' => 'textfield', '#title' => t('Your name'), '#default_value' => empty($form_state['values']['step1']['name']) ? '' : $form_state['values']['step1']['name'], '#required' => TRUE, ); break; case 2: $form['step2'] = array( '#type' => 'fieldset', '#title' => t('Step 2: Street address info'), ); $form['step2']['address'] = array( '#type' => 'textfield', '#title' => t('Your street address'), '#default_value' => empty($form_state['values']['step2']['address']) ? '' : $form_state['values']['step2']['address'], '#required' => TRUE, ); break; case 3: $form['step3'] = array( '#type' => 'fieldset', '#title' => t('Step 3: City info'), ); $form['step3']['city'] = array( '#type' => 'textfield', '#title' => t('Your city'), '#default_value' => empty($form_state['values']['step3']['city']) ? '' : $form_state['values']['step3']['city'], '#required' => TRUE, ); break; } if ($step == 3) { $form['submit'] = array( '#type' => 'submit', '#value' => t("Submit your information"), ); } if ($step < 3) { $form['next'] = array( '#type' => 'submit', '#value' => t('Next step'), '#ajax' => array( 'wrapper' => 'wizard-form-wrapper', 'callback' => 'ajax_example_wizard_callback', ), ); } if ($step > 1) { $form['prev'] = array( '#type' => 'submit', '#value' => t("Previous step"), // Since all info will be discarded, don't validate on 'prev'. '#limit_validation_errors' => array(), // #submit is required to use #limit_validation_errors '#submit' => array('ajax_example_wizard_submit'), '#ajax' => array( 'wrapper' => 'wizard-form-wrapper', 'callback' => 'ajax_example_wizard_callback', ), ); } return $form; } function ajax_example_wizard_callback($form, $form_state) { return $form; } function ajax_example_wizard_submit($form, &$form_state) { // Save away the current information. $current_step = 'step' . $form_state['storage']['step']; if (!empty($form_state['values'][$current_step])) { $form_state['storage']['values'][$current_step] = $form_state['values'][$current_step]; } // Increment or decrement the step as needed. Recover values if they exist. if ($form_state['triggering_element']['#value'] == t('Next step')) { $form_state['storage']['step']++; // If values have already been entered for this step, recover them from // $form_state['storage'] to pre-populate them. $step_name = 'step' . $form_state['storage']['step']; if (!empty($form_state['storage']['values'][$step_name])) { $form_state['values'][$step_name] = $form_state['storage']['values'][$step_name]; } } if ($form_state['triggering_element']['#value'] == t('Previous step')) { $form_state['storage']['step']--; // Recover our values from $form_state['storage'] to pre-populate them. $step_name = 'step' . $form_state['storage']['step']; $form_state['values'][$step_name] = $form_state['storage']['values'][$step_name]; } // If they're done, submit. if ($form_state['triggering_element']['#value'] == t('Submit your information')) { $value_message = t('Your information has been submitted:') . ' '; foreach ($form_state['storage']['values'] as $step => $values) { $value_message .= "$step: "; foreach ($values as $key => $value) { $value_message .= "$key=$value, "; } } drupal_set_message($value_message); $form_state['rebuild'] = FALSE; return; } // Otherwise, we still have work to do. $form_state['rebuild'] = TRUE; }
相关推荐
Ajax实现页面分步加载(仿新浪、网易等大型网站首页)
AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX
ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件
ajax详解ajax详解ajax详解 ajax详解ajax详解ajax详解 ajax详解ajax详解ajax详解 ajax详解ajax详解ajax详解
ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效
ajax ajax原理 ajax代码 ajax编程 ajax学习
ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件...
ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子
Ajax Ajax本质 Ajax本质源码 Ajax Ajax本质 Ajax本质源码 Ajax Ajax本质 Ajax本质源码
ajax上传ajax上传ajax上传ajax上传ajax上传
关于Ajax的常见面试题 1,Ajax和javascript的区别? javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括javascript。 Javascript是由...
ajax 分页ajax 分页ajax 分页
Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包
AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战
three ajax ajax ajaxthreethree ajax ajax ajax ajax ajax ajax three ajax ajax ajax
AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。 国 [使用ajax 构建应用程序] 使用ajax 构建应用程序 内翻译常为“阿贾克斯”和阿贾克斯足球队同音。Web应用的交互如Flickr,Backpack和...
ajax 宝典 ajax 宝典 ajax 宝典 ajax 宝典
Ajax组件Ajax组件Ajax组件Ajax组件
json ajax ajax框架 json ajax ajax框架
ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论...