【问题标题】:Simulate back button after ajax-submitted form submitted to Preview Formajax提交的表单提交到预览表单后模拟后退按钮
【发布时间】:2013-02-24 11:22:21
【问题描述】:

我有一个多部分表单,其中数据流是:

  1. 回答表格,提交(通过 ajax 帖子)
    • jQuery 表单和 CodeIgniter 验证如果存在则回显
  2. 预览表单中的答案
    • 选择:取消编辑提交到数据库

这三个选项是预览表单中具有唯一名称的提交按钮。 我的 提交到数据库 过程已完成,而我在执行取消和编辑时遇到了困难。我目前对这三个的方法是(在控制器内部):

function preview_form_redirect() 
{
  if ( isset($_POST['submit-form']) ) {
    $this->send_to_database();
  } else if ( isset($_POST['edit-form']) ) {
    // return to form with all answers intact
  } else { // CANCEL FORM
    redirect('accounts');
  }
} // END preview_form_redirect() 

我对“编辑”选项的计划是模拟后退按钮,因为我确信数据和 DOM 会完好无损。

我知道我对这两种方法的方法并不完美,但我被卡住了,不知道还有什么其他方法可以模拟这两种方法。是否有可能且兼容的方式来为我的设置执行这两种操作?

【问题讨论】:

    标签: php javascript ajax forms codeigniter


    【解决方案1】:

    您必须使用 Javascript 来完成。 如果您的浏览器不完全支持 HTML5 历史 API,您可以使用这个使用 html5 推送状态的库或 html 片段:https://github.com/browserstate/History.js/

    当用户点击编辑按钮时,执行如下操作: History.pushState({state:1}, "State 1", "?state=1");

    并在后退按钮上注册一个事件: History.Adapter.bind(window,'popstate',function(){ //从页面中删除可编辑元素 });

    希望对你有帮助。

    【讨论】:

    • 谢谢。你觉得模拟浏览器的后退按钮实用吗?
    • 是的,我想是的。它现在是 HTML5 规范的一部分,并且您有很多应用程序正在这样做:Facebook、Gmail、Google Plus,...
    • 非常感谢!我使用 AJAX 提交 + CodeIgniter 设置表单非常复杂,我需要所有最佳实践,因为我只是在学习 :) 我真的很感激!
    • 另一个问题:这会刷新正在加载的页面(通过后退按钮)吗?我不希望加载该特定页面。
    • 没有。它不会导致页面重新加载。那个图书馆会照顾它。用它做一个简单的例子,然后合并到你的应用程序中。
    【解决方案2】:

    尝试使用原生js返回方法:history.back()

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2012-11-08
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2016-12-25
      相关资源
      最近更新 更多