如何使功能仅在第一个主体加载时起作用?

Posted

技术标签:

【中文标题】如何使功能仅在第一个主体加载时起作用?【英文标题】:How to make a function only work on first body onload? 【发布时间】:2011-05-11 23:48:15 【问题描述】:

我有一个分类网站,当用户第一次进入网站时,会在 body onload 事件上提交一个表单:

表单已提交并在同一页面上的 iframe 中显示其结果。

问题是我不希望每次用户在浏览器中单击后退或前进时都调用 submit_form() 函数,那么如何防止浏览器在使用后退/前进按钮时提交它?

例子:

用户进入网站时提交表单。 表单在 iframe 中显示搜索结果 用户单击其中一个结果并显示新页面 用户点击返回按钮再次转到搜索结果 用户发现表单再次被重新提交,因为 body onload 触发器

我应该如何解决这个问题?

谢谢

【问题讨论】:

@Chinmayee 为什么要从标签中删除 phpmysql?我认为它们是相关的。 这个问题是通用的,可以应用于任何语言,如 java、.net。数据库技术也与这个问题无关。第三,我们可以为任何问题设置 5 个标签,所以我认为 session/cookie 是比 php 和 mysql 更相关的标签 @Chinmayee 你怎么知道他想要会话或cookie?它们确实有一些相关性,但是有 php 和 mysql 更有帮助,因为你知道他会考虑服务器端和/或数据库方法。 【参考方案1】:

仅客户端解决方案:设置cookie。

【讨论】:

对于禁用 cookie 的人,您可以对 URL 进行后备(例如提供参数 ?fristrun=true)【参考方案2】:

你用 php 标记了这个问题,所以我认为使用服务器端会话更好

开始一个会话,初始化一个会话 varto 0

用户进入网站时提交表单。

如果 session var == 0 则显示结果

表单在 iframe 中显示搜索结果

将会话变量设置为 1

用户单击其中一个结果并显示新页面 用户点击返回按钮再次进入搜索结果

这不会发生:

用户发现表单再次被重新提交,因为 body onload 触发器

【讨论】:

不会提交仍然发生,只有 php 不返回响应?我认为解决方案需要基于客户端/cookie 才能首先停止提交.. 好的,cookie 也可以。我只是控制第二页上的会话

以上是关于如何使功能仅在第一个主体加载时起作用?的主要内容,如果未能解决你的问题,请参考以下文章

javascript插件仅在鼠标进入视口时起作用

jquery on click 功能仅在双击时起作用

SQL Reporting Services报告仅在第二次单击时加载

scrollTop 按钮仅在第一次单击时起作用

Ng-如果仅在刷新页面时起作用

仅在第一个功能完成后才执行功能 - ios