Coldfusion表单提交禁用提交按钮

Coldfusion form submit disable submit button

本文关键字:提交 按钮 表单提交 Coldfusion      更新时间:2023-09-26

我在这里寻找一些建议。我以前贴过一个问题:禁用提交按钮。

  1. 我有一个表单提交给自己,看起来像下面

    <cfif isdefined(form.submit)>
        thank you for taking the test
    <cfelse>
       Actual form with radio buttons, ques, ans
    </cfif>
    
  2. 现在,在用户接受测试并点击提交并在表单的感谢部分之后。此时,如果他点击浏览器上的后退按钮,他仍然会看到表单。

  3. 我已经在服务器端验证了,如果他刷新表单,他将再次被带到感谢页面。

  4. 我试图禁用提交按钮,但这并不总是在所有浏览器上工作。谁能告诉我在这种情况下我该怎么做?
  5. 我应该做一个history.forward();在纸上?这样当用户点击返回浏览器按钮时,他仍然停留在同一个页面上。
  6. 或者我是否应该以这种方式清除缓存,以便当用户点击后退按钮时,他不会看到表单,而只是停留在感谢页面上。

    <cfoutput>
        <cfheader name="expires" value="#now()#">
        <cfheader name="pragma" value="no-cache">
        <cfheader name="cache-control" value="no-cache, no-store, must-revalidate">
    </cfoutput>
    
  7. 或者我遗漏了什么,上面这些只是黑客,不应该这样做。非常感谢您的回复。

如果用户有一个唯一的id,那么你可以检查他们是否已经通过查找数据库记录或类似的方式完成了调查。否则,一个简单的选择是在提交表单后设置会话变量。会话是有时间限制的,并且在新的浏览器会话中会有所不同,所以不能保证阻止同一个人再次提交调查,但是像这样的东西可能会解决您的问题。

 <cfif structKeyExists(form,"submit") or structKeyExists(session, "completed")>
     <cfif !structKeyExists(session, "completed")>
         <!--- do validation etc here, if all good then --->
         <cflock scope="session" timeout="5">
             <cfset session.completed = true>
         </cflock>
     </cfif>
     thank you for taking the test
 <cfelse>
     Actual form with radio buttons, ques, ans
 </cfif>

或者,您可以通过使用cookie (cfcookie)而不是使用会话来实现。