javascript - 如何使用 Ajax 在 Lightbox 中提交 Drupal 表单

标签 javascript jquery ajax drupal-7 lightbox

我有一个已成功加载到灯箱中的表单。灯箱出现时没有任何 css 或 javascript。模块,如日期弹出窗口,在灯箱中不起作用。

我添加到提交按钮的 ajax 处理程序在灯箱中也不起作用。相反,表单会正常提交,将用户从他们的初始页面带到我为灯箱分配的 URL ( $items['entry/lightbox'] )。表单验证也无法仅保留在灯箱内。我可能需要研究一个 javascript 解决方案。

但是,如果在灯箱外部调用表单,ajax 处理程序可在提交按钮上正常工作。由于 js/css 未加载到灯箱中,我感觉所有这些问题都联系在一起。

我的问题:Ajax 提交按钮无法在灯箱中执行并阻止用户离开页面。

我的问题:假设缺少的 JS(添加 CSS)与问题相关,我如何在灯箱中加载我的表单所需的 JS 和 CSS?

我的目标:从他们的主页(例如 work/####/home),使用户能够打开表单、插入值、验证值并将值提交到 lightbox 中的数据库,而无需离开他们的页面。

理想情况下,在不关闭的情况下,我希望 drupal 消息(如表单验证错误)出现在灯箱中,以便用户有机会使用其输入的值更正错误。我更喜欢 php 验证,但我仍然对 jQuery 持开放态度。

我的代码:

$items['work/%/home'] = array(
    'title' => 'Admin Home',
    'page callback' => 'fsa_work_page',//Callback not shown below
    'page arguments' => array(0),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
);
$items['entry/lightbox'] = array( 
    'title' => 'Lightbox Overlay',
    'page callback' => 'fsa_lightbox',
    'page arguments' => array(0),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
);
function fsa_lightbox(){
    $output = '';       
    $output .= drupal_render(drupal_get_form('fsa_daycare_roster_form'));
    print $output;
}
function fsa_daycare_roster_form(/*args*/){
$form['wrapper'] = array(
    '#markup' => '<div id="fsa_daycare_roster_form">Wrapper Div</div>'
);//I read this could somehow be used to capture drupal msg within the lightbox?
$form['fname'] = array(
    '#type' => 'textfield',
    '#title' => t('First Name'),
    '#prefix' => '<div id="form-left">'
);
$form['dob'] = array(
    '#type' => 'date_popup',
    '#title' => t('Date of Birth'),
    '#date_format' => $format,
    '#date_label_position' => 'none',
    '#date_year_range' => '-25:+0',
    '#required' => TRUE,
    '#suffix' => '</div>',
);
$form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save Entry'),
    '#ajax' => array(
        'callback' => 'fsa_daycare_roster_form_submit',
        'wrapper' => 'fsa_daycare_roster_form',
        'method' => 'replace',
        'effect' => 'fade',
  ),
);
return $form;

function fsa_daycare_roster_form_validate($form_id, &$form_data){
    $fname = $form_data['values']['fname'];

    if(!is_string($fname) || empty($fname)){
    form_set_error('fname', t("Please Enter a valid First Name"));  
    }
        /*more*/
}
}//end form func

function fsa_daycare_roster_form_submit($form_id, &$form_data){
     $insertDaycare = db_insert($dcc_table)
    ->fields(array(
        'child_fname' => $form_data['values']['fname'],
        'dob' => $form_data['values']['child_dob'],
          /*more*/
    ))
    ->execute();
}

任何智慧的话语和示例代码将不胜感激。如果根据您的经验,您认为我的方法有些无效或效率低下,请告诉我并提供替代方法。我会欢迎它。

谢谢。

最佳答案

我建议使用对话框 API 而不是灯箱,假设灯箱是指“模态”。

这里是 a good writeup由我的 friend 罗杰

例如,查看 the examples module .

有一个使用ajax的具体例子。

举一个现实世界的例子,我 modified an add-to-cart button for Drupal Commerce with dialog你可以在我的github上看看

关于javascript - 如何使用 Ajax 在 Lightbox 中提交 Drupal 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549254/

相关文章:

php - 具有复选框功能的多选下拉菜单

javascript - 使用另一个网页中的按钮更改一个网页中的 div

javascript - 打印选定的图表

javascript - jQuery 函数toggle() 在 WordPress 网站中不起作用

javascript - Google 地理编码 - 坐标未返回到输入框中

jquery - 在 Android 上查看闪烁

javascript - Django 框架,网格行中的增删改查

JavaScript 无法在 Angular 中正确解析 JSON

jquery - IE 更改功能不会触发

javascript - 使用 AJAX 将 SQL WHERE 查询获取到 JavaScript 中