【问题标题】:Drupal 7 Webform AJAX - How to (re)initate after load?Drupal 7 Webform AJAX - 加载后如何(重新)初始化?
【发布时间】:2014-05-01 14:10:09
【问题描述】:

问题/情况

我们想要验证一个使用 AJAX 动态加载的网络表单(通过 webform_ajax)。

步骤(所需)

  1. 访问者点击链接
  2. 数据在 DIV 中加载(jQuery AJAX 加载)
  3. 表单已呈现并可发送(带有验证和 AJAX 发送)

问题

提交表单时,不会触发 AJAX 验证,访问者会被发送到相应的节点(下一页)。我们如何设置 Drupal 来完成所需的步骤?我们使用以下模块,并尝试了几种技术,请参阅下面的测试。

技术问题

在普通节点上,webform 有 Drupal.settings,但是当使用 AJAX 加载时,webform 没有 Drupal.settings。 Drupal.settings 包含在父包装器 DIV 上使用的节点 ID(例如:#webform-ajax-wrapper-127)。最后剥离 ID 以供全球使用是行不通的。

主要问题

我们如何解决这个问题?

子问题(单独或解决此问题的步骤)

  1. 在 AJAX 加载(新内容)之后包含 JS 的最佳方式是什么?
  2. 我们如何(重新)在新内容上启动 Webform/Webform AJAX?
  3. 我们如何添加自定义/新 Webform Drupal.settings?

测试

  • 行为:$('div').ajaxComplete(function(){Drupal.attachBehaviors(DIV);});
  • 将JS插入页面drupal_add_js('sites/all/modules/webform/js/webform.js');
  • 插入其他网络表单以使用新内容的代码。

功能模块

  • jQuery AJAX 加载
  • 网络表单
  • Webform Ajax

页面上的模块

  • 面板
  • 观看次数

你能帮助我朝着正确的方向前进吗?你有什么经验来完成这项工作?

【问题讨论】:

  • This answer 解释了如何在 AJAX 请求的内容中包含缺少的 javascript。看完后,你大概可以解决(至少)子问题1。
  • 谢谢,但我们如何才能让它在面板中工作?

标签: jquery drupal drupal-7 drupal-modules


【解决方案1】:

在提交回调函数中,清除如下字段:

function SUBMIT_CALLBACK($form, $form_state) {
  $sid = $form_state['values']['details']['sid'];
  if ($sid) { // Success in submitted.
    $form['submitted']['FIELDNAME1']['#value'] = '';
    $form['submitted']['FIELDNAME2']['#value'] = '';
  }
  return $form;
}

参考http://envisioninteractive.com/drupal/add-ajax-to-a-webform-in-drupal-7/

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多