2011-04-20 13 views
0

我有一個「password_reset_status」JSP,通過電子郵件鏈接到我的Web應用程序爲響應密碼重置而發送的電子郵件請求。的JSP能夠顯示1 3的東西:HTML,Javascript和JSP:單擊提交按鈕時不從事「操作」的表單

  • 甲形式,如果在該鏈路的復位碼相匹配的數據庫中的
  • 一個消息,指出復位代碼是不正確的輸入新的密碼
  • 一條消息,表明已發生錯誤(用於用戶無復位碼,碼已過期,數據庫連接問題等)

所有的代碼工作的,除提交表單。我有jQuery驗證的表單,防止提交,直到輸入有效。這按照它應該的方式工作。然而,當輸入有效時(我知道它是有效的,因爲我已經定製它來顯示檢查,x的有效和無效字段旁邊,並且字段屬性表明它們是有效的),但它不執行其「動作」屬性,如果它的任何JavaScript以外的「警報()」(甚至沒有一個字符串警報!)!

我有一個類似的系統爲我的網絡應用程序中的其他形式(唯一的區別是要驗證的字段,以及調用發送數據的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(後bug是解決它將被放入一個單獨的JavaScript文件)。驗證的JavaScript工作,而一個簡單的警報不,所以我認爲它可能是與表單的JSP代碼的東西。任何人都可以將我指向正確的方向嗎?

編輯

因此,要總結:

  • 行動= 「(某些URL)」 的作品
  • 行動= 「警報()」 的作品(顯示服務器的IP )
  • action =「(任何其他javascript)」DOHER NOT WORK

回答

1

嘗試增加使用

$('#createNewPasswordForm').submit(callback)

+0

有這個問題,你的處理程序是驗證插件還附加一個監聽器提交事件。那麼會發生什麼呢是兩個監聽器被同時執行(這導致表單被髮送而沒有首先被驗證)。 – Kevin 2011-04-20 14:50:08

+0

那麼在驗證功能結束時執行send函數會不會更好?您可能想查看jQuerys推遲的api。 http://jqapi.com/#p=deferred.promise – babsher 2011-04-20 14:54:12

+0

謝謝。這看起來是一個可能的解決方案......如果有人無法弄清楚爲什麼這種方式不起作用(因爲它應該!),我可能會走這條路。 – Kevin 2011-04-20 15:02:14