HTML、Javascript和JSP:Form不参与;行动“;单击“提交”按钮时
我有一个“password\u reset\u status”JSP,通过我的web应用程序响应密码重置请求发送的电子邮件链接到该JSP。JSP能够显示以下三项中的一项:HTML、Javascript和JSP:Form不参与;行动“;单击“提交”按钮时,javascript,jquery,forms,jsp,el,Javascript,Jquery,Forms,Jsp,El,我有一个“password\u reset\u status”JSP,通过我的web应用程序响应密码重置请求发送的电子邮件链接到该JSP。JSP能够显示以下三项中的一项: 如果链接中的重置代码与数据库中的重置代码匹配,则输入新密码的表单 说明重置代码不正确的消息 说明发生错误的消息(没有用户重置代码、代码过期、数据库连接问题等) 除提交表格外,所有代码均有效。我对表单进行了jQuery验证,在输入有效之前阻止提交。这是它应该做的。但是,当输入有效时(我知道它是有效的,因为我已经自定义了它,在
- 如果链接中的重置代码与数据库中的重置代码匹配,则输入新密码的表单
- 说明重置代码不正确的消息
- 说明发生错误的消息(没有用户重置代码、代码过期、数据库连接问题等)
<!--The action normally contains an AJAX function that populates the text of "createNewPasswordStatusMessage", but the alert was put there for debugging purposes (it won't even launch the alert! -->
<body>
<c:catch var="e">
<c:choose>
<c:when test="${sessionScope.passwordResetStatus == applicationScope.passwordResetStates.passwordResetCodeCorrect}">
<div id="content">
<h1 id="title"><!--Title of my web app--></h1>
<form id="createNewPasswordForm" action="javascript:alert(\"What is going on?\")" method="post">
<div class="formRows"> <label class="nameLabels" for="newPassword">New password:</label> <input class="formFields" type="password" name="newPassword"/> </div>
<div class="formRows"> <label class="nameLabels" for="confirmNewPassword">Confirm:</label> <input class="formFields" type="password" name="confirmNewPassword"/> </div>
<div class="formRows"> <input type="hidden" name="ID" value="${sessionScope.ID}"/></div>
<div class="formRows"> <input type="hidden" name="firstName" value="${sessionScope.firstName}"/></div>
<div class="formRows"> <input type="hidden" name="action" value="createNewPassword"/> </div>
<div class="formRows"> <input id="newPasswordFormSubmitButton" type="submit" value="Submit new password"/> </div>
</form>
<p id="createNewPasswordStatusMessage"></p>
</div>
</c:when>
<c:when test="${sessionScope.passwordResetStatus == applicationScope.passwordResetStates.passwordResetCodeIncorrect}">
<!-- Message stating that password is incorrect. Omitted for brevity. -->
</c:when>
<c:when test="${sessionScope.passwordResetStatus == applicationScope.passwordResetStates.passwordResetCodeExpired}">
<!-- Message stating that reset code has expired or that an error may have occurred. Omitted for brevity. -->
</c:when>
</c:choose>
</c:catch>
<c:if test="${e!=null}">The caught exception is:
<div id="content">
<h1 id="title"><!--Title of my web app--></h1>
<p id="statusMessage">"<c:out value="${e}" /></p>
</div>
</c:if>
</body>
新密码:
确认:
捕获的异常是:
“
我不想让文档的标题淹没了人们,其中包含javascript(在错误被解决后,它将被放入一个单独的javascript文件中)。验证javascript有效,而简单的警报无效,因此我认为它可能与表单的JSP代码有关。有人能给我指出正确的方向吗 编辑 因此,总结一下:
- action=“(某些url)”有效
- action=“alert()”起作用(显示IP (服务器的名称)
- action=“(任何其他javascript)”不起作用 不行
$(“#createNewPasswordForm”).submit(回调)
问题在于验证插件还将一个侦听器附加到submit事件。因此,两个侦听器同时执行(这导致发送表单时没有先验证表单)。那么,在验证函数的末尾执行send函数不是更好吗?您可能想查看jQuerys deferred api。谢谢。这看起来是一个可能的解决方案…如果有人不明白为什么这不起作用,我可能会这样做(因为它应该!)。您应该练习低调的javascript,并在javascript文件中添加处理程序,而不是直接在html中添加处理程序。这可能只是您的浏览器出现了一些奇怪的行为,也可能是jQuery正在接管事件系统,因此浏览器从不查看action属性。本打算更新此帖子。结果发现问题是我的代码中有bug!谢谢你的帮助。这是我HTML正文中唯一的javascript。我只是发现将submit操作放在action属性中更符合表单定期提交的方式。另一种方法需要添加一个额外的侦听器;我想尽量减少这一点,而且,对于action attr,我也没有什么可放的ibute,这是HTML格式良好所必需的(除非我输入了一个伪值)。