Drupal形式的AJAX?
您将如何通过Drupal逐步构建一个使用AJAX来完成下一个表单步骤的表单 比如说,Drupal形式的AJAX?,drupal,drupal-6,drupal-fapi,drupal-forms,drupal-ajax,Drupal,Drupal 6,Drupal Fapi,Drupal Forms,Drupal Ajax,您将如何通过Drupal逐步构建一个使用AJAX来完成下一个表单步骤的表单 比如说, Step 1: I like Baseball I don't like Baseball. 当那个人单击Like或notlike时,我想使用AJAX来识别和提取表单的下一部分,删除/隐藏第一部分,因为它不是必需的,然后显示下一部分 例如: Step 1: I like Baseball *click (fade out) Step 2: My favorite team i
Step 1:
I like Baseball
I don't like Baseball.
当那个人单击Like或notlike时,我想使用AJAX来识别和提取表单的下一部分,删除/隐藏第一部分,因为它不是必需的,然后显示下一部分
例如:
Step 1:
I like Baseball
*click
(fade out)
Step 2:
My favorite team is __________
The player I like most is __________
通过Drupal表单API实现这一点的最佳方法是什么?我知道如何构建表单和模块,但我从未使用过AJAX。我知道有一些东西应该是有帮助的,但我想知道这里是否有人做过,以及他们是如何做到的。通常我使用字段集创建完整表单,然后通过jquery手动控制它们。
我假设drupal中有很多现成的模块,其中一些:
/
另外:您可能想看看。如果您不想编写任何代码,也不需要输入数据作为drupal节点,我建议使用webform模块。它有一个用于构建表单的非常简单的UI,并允许您使用条件字段执行多页表单。然后,您可以将结果导出为CSV、通过电子邮件发送,等等。我在drupal 7中为这个问题提供了解决方案。首先,我按照要求使用Ajax解决它(如果有人需要,我可以将其转换为drupal6),不过最好使用属性#states解决这个问题。所以也提出了一个解决方案,在底部使用状态 如何使用Ajax解决此问题:
function ajax_in_drupal_form($form, &$form_state)
{
$baseball = array(
'like' => t('I like Baseball'),
'unlike' => t('I don\'t like Baseball')
);
$form['step'] = array(
'#prefix' => '<div id="baseball-wrapper">',
'#suffix' => '</div>',
);
if ($form_state['values']['baseball'] == 'like') {
$form['step']['team'] = array(
'#type' => 'textfield',
'#title' => t('My favorite team is'),
);
$form['step']['player'] = array(
'#type' => 'textfield',
'#title' => t('The player I like most is'),
);
}
else if ($form_state['values']['baseball'] == 'unlike') {
$form['step']['other'] = array(
'#type' => 'textfield',
'#title' => t('What do you like'),
);
}
else {
$form['step']['baseball'] = array(
'#type' => 'radios',
'#options' => $baseball,
'#title' => t('Select your option'),
'#ajax' => array(
'callback' => 'ajax_update_step_callback',
'wrapper' => 'baseball-wrapper',
),
);
}
return $form;
}
function ajax_update_step_callback($form, $form_state) {
return $form['step'];
}
function states_in_drupal_form($form, &$form_state)
{
$baseball = array(
'like' => t('I like Baseball'),
'unlike' => t('I don\'t like Baseball')
);
// step 1
$form['step']['baseball'] = array(
'#type' => 'radios',
'#options' => $baseball,
'#title' => t('Select your option'),
'#states' => array(
'invisible' => array(':input[name="baseball"]' => array('checked' => TRUE),
),
)
);
// step 2 like baseball
$form['step']['team'] = array(
'#type' => 'textfield',
'#title' => t('My favorite team is'),
'#states' => array(
'visible' => array(':input[name="baseball"]' => array('checked' => TRUE)),
'visible' => array(':input[name="baseball"]' => array('value' => 'like')),
)
);
$form['step']['player'] = array(
'#type' => 'textfield',
'#title' => t('The player I like most is'),
'#states' => array(
'visible' => array(':input[name="baseball"]' => array('checked' => TRUE)),
'visible' => array(':input[name="baseball"]' => array('value' => 'like')),
)
);
// step 2 I don't like baseball
$form['step']['other'] = array(
'#type' => 'textfield',
'#title' => t('What do you like'),
'#states' => array(
'visible' => array(':input[name="baseball"]' => array('checked' => TRUE)),
'visible' => array(':input[name="baseball"]' => array('value' => 'unlike')),
)
);
return $form;
}