【问题标题】:How to do "HTML FORM action=location.replace('nextpage.html')"?如何做“HTML FORM action=location.replace('nextpage.html')”?
【发布时间】:2016-04-09 01:43:34
【问题描述】:

标题实际上是我实现目标的失败尝试。具体来说,我想
1. 从 main.html 转到一个页面(例如,到 page1.html)。
2.在page1的表单中收集数据。
3. 在提交时,转到 page2.html(使用 PHP 将数据保存到数据库并公布结果)。
4. 点击“确定”返回主菜单页面。
看起来很合理,对吧?

上面的第 4 步是我的问题。

我尝试过的事情:
1. 在 page2 中单击 Ok 时调用 history.back。
这会转到 page1 而不是主页面
2. 在 page2 中的“Ok”上调用 javascript location.href=main.html
这可以工作并转到 main,但单击 main 中的 Back 按钮会将用户带回 page1。 (不好)
3. 在 page1 的 action= 和 onSubmit() 中使用 javascript history.replace() 的许多变体。
这可行,但来自表单的输入在查询字符串中传递给第2页)
4. 清除历史记录。
出于安全考虑,这似乎是不可能的。
5. 以编程方式编写第 1 页上 history.replace 的查询字符串(来自表单输入)。
这很有效,但非常费力、容易出错并且非常不雅

任何建议将不胜感激。

========= 我的解决方案 4/8/16 ==============
我将在下面为任何感兴趣的人发布我的最终解决方案。
在page1.html中:

<script type="text/javascript">

function addarg(q,addend)
{
  qnew = q + addend;
  return( qnew );
}

function Next()
{
  // GET INPUT VALUES FROM FORM
  frm = document.forms["MainForm"];
  first   = frm.first.value;
  last    = frm.last.value;
  phone   = frm.phone.value;

  // COMPOSE QUERY
  query = "processForm.php";
  query = addarg( query, '?first='+first );
  query = addarg( query, '&last='+last   );
  query = addarg( query, '&phone='+phone );

  location.replace( query ); // chain to processing page
}
</script>

<form action="javascript:Next()" name="MainForm" method=GET>
  ...
</form>

当从 processForm.php 发出 history.back() 时,它会根据需要返回到主菜单。

【问题讨论】:

    标签: javascript html forms


    【解决方案1】:

    似乎更简单的方法是在您的page2.html上放置一个简单的&lt;a href=main.html&gt;Ok&lt;/a&gt;

    然后在这个 ma​​in.html 上关联一个标志(可能是一个 cookie),它“指示”page1.html 如果它没有被 ma​​in.html,但来自“后退”按钮(例如,通过刷新元数据,或通过加载 page1.html#randomnum,其中 randomnum 是您实时找到的值强制您的浏览器了解这不是“旧”page1.html,而是“新”page1.html,帮助浏览器不是从缓存中获取,而是从网络获取) .

    原则是:如果page1.html被"b​​ack"调用,必须是"clear"的page1.html,不显示任何数据输入用户最终进入。

    【讨论】:

    • 这是一个有趣的方法。我会试试的。
    • 我尝试了“randomnum”解决方案,但(我相信)这只会阻止显示 server-cached 页面:它不会阻止浏览器历史页面显示。我没有实现重新显示时清除表单的方法,因为它仍然会在“返回”上显示(空)输入表单 - 而不是预期的结果。
    • 我确实在上面的方法 5 上取得了成功,但我对所涉及的丑陋/讨厌的编码不满意。
    • 你是对的。更好的方案,但遵循我的方法(我不确定这是否会解决您的所有问题,也许其中一些),将是在 page1.html 上实现某种“智能”以获得良好的效果检测用户来自哪里。我想说的是 main.html 上的 cookie。导航路径将是: 1)你在主要; 2)您请求page1; 3) main 将标志保存到 cookie 中; 4)page1即将显示; 5)page1读取cookie; 6) page1 显示正确的内容; 7) 如果没有 cookie,page1 会强制清除表单元素。
    • 感谢您的跟进。但是我认为建议的逻辑也太复杂了(我有很多页面要修改)。我认为 cookie 的想法会奏效:甚至可能在 page1 中插入一些逻辑以检测我们是否回来了,并通过 php 在 page1 的 中插入一些逻辑以重定向到 main。听起来还是太毛茸茸了,不合我的口味。不过,我将问题标记为已回答,以感谢您的帮助。
    猜你喜欢
    • 2019-07-05
    • 2012-01-13
    • 2016-09-04
    • 2012-12-14
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2015-05-14
    相关资源
    最近更新 更多