HTML、Javascript和JSP:Form不参与;行动“;单击“提交”按钮时

HTML、Javascript和JSP:Form不参与;行动“;单击“提交”按钮时,javascript,jquery,forms,jsp,el,Javascript,Jquery,Forms,Jsp,El,我有一个“password\u reset\u status”JSP,通过我的web应用程序响应密码重置请求发送的电子邮件链接到该JSP。JSP能够显示以下三项中的一项: 如果链接中的重置代码与数据库中的重置代码匹配,则输入新密码的表单 说明重置代码不正确的消息 说明发生错误的消息(没有用户重置代码、代码过期、数据库连接问题等) 除提交表格外,所有代码均有效。我对表单进行了jQuery验证,在输入有效之前阻止提交。这是它应该做的。但是,当输入有效时(我知道它是有效的,因为我已经自定义了它,在

我有一个“password\u reset\u status”JSP,通过我的web应用程序响应密码重置请求发送的电子邮件链接到该JSP。JSP能够显示以下三项中的一项:

  • 如果链接中的重置代码与数据库中的重置代码匹配,则输入新密码的表单
  • 说明重置代码不正确的消息
  • 说明发生错误的消息(没有用户重置代码、代码过期、数据库连接问题等)
除提交表格外,所有代码均有效。我对表单进行了jQuery验证,在输入有效之前阻止提交。这是它应该做的。但是,当输入有效时(我知道它是有效的,因为我已经自定义了它,在有效和无效字段旁边显示检查和x,并且字段属性表明它们是有效的),如果它的javascript不是“alert()”(甚至不是带字符串的警报),它就不会执行“action”属性

我的web应用程序中的其他表单也有一个类似的系统(唯一的区别是要验证的字段,以及发送数据时调用的ajax函数),它们的行为都是正常的。但是,它们都位于常规html页面上。您认为这个问题可能是由于这是一个JSP造成的吗

以下是JSP主体的代码:

<!--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格式良好所必需的(除非我输入了一个伪值)。