2012-06-06 35 views
3

是否可以使用javascript在grails的<g:submitButton>標記的onCLick屬性上實現驗證?我正在使用webflow從一個頁面轉到另一個頁面。這裏是我的下一步按鈕代碼:關於grails的驗證submitButton

   <script type="text/Javascript">      
       function isfilipinoCitizen() {  
        var selected = "${accountInfo?.filipinoCitizen}"; 
         if(selected == "1"){ 
          return true; 
         }else{ 
          alert(selected) 
          alert("You must be a Filipino citizen to register!") 
          document.location.href = "myhomepage"; 
         } 
       } 
       </script> 

我想在這裏做的是阻止該網頁繼續到下一個頁面:

<g:submitButton class="btn btn-primary" name="next" value="Next" onclick="return isfilipinoCitizen()"></g:submitButton> 

的isfilipinoCitizen功能是在我的javascript代碼中找到如果來自用戶的輸入是0,並將用戶重定向到系統的主頁。但它似乎根本不起作用。

任何你們的幫助是非常感謝。

謝謝!

+1

這個問題不是關於grails groovy或spring,而是關於js表單驗證。 – GalmWing

+0

[如何在使用if-else語句的Grails中使用提交按鈕?](http://stackoverflow.com/questions/10891165/how-to-use-submit-button-in-grails-with-if- else聲明) –

回答

6

首先,我認爲你應該使用Firebug來檢查實際呈現爲html的內容。它還有助於發現一些javascript錯誤或無法加載資源。

其次,您應該檢查javascript是否首先被調用,方法是在isfilipinoCitizen()的開始處放置一個alert('come here');。之後,在第一個條件的警報。 JavaScript是一種特殊的語言,我們必須與之打交道:)時要小心:

   <script type="text/Javascript">      
       function isfilipinoCitizen() {  
        alert("come here"); 
        var selected = "${accountInfo?.filipinoCitizen}"; 
         if(selected == "1"){ 
          alert("come there"); 
          return true; 
         }else{ 
          alert(selected) 
          alert("You must be a Filipino citizen to register!") 
          document.location.href = "myhomepage"; 
         } 
       } 
       </script> 

最後(你能保證以後你的javascript函數得到正確的稱呼),你必須做的比「document.location.href更多「阻止表單提交。爲了快速生效,我會推薦jQueryonSubmit() event。如果你喜歡純JavaScript的解決方案,你可以遵循Galm和Anuj提出解決方案:把的onsubmit入標籤:

<g:form name="myForm" action="myaction" onsubmit="return isfilipinoCitizen()">...</g:form> 

在失敗的情況下,請記得返回false :)

P/s:直接插入${accountInfo?.filipinoCitizen}到javascript可能會起作用,但這不是最佳做法。將「isFilipinoCitizen」作爲參數傳遞給javascript函數會更好。

另一個可用性想:如果你已經知道哪些用戶已登記的權利,爲什麼一定要等到用戶填寫的所有表格,告訴他們,他們必須是菲律賓公民進行登記?爲什麼不在用戶通過之前(頁面加載後)通知用戶?

+0

是的非常感謝你的建議! :) – chemilleX3

2

嘗試用onsubmit代替。

<g:submitButton class="btn btn-primary" name="next" value="Next" onsubmit="return isfilipinoCitizen()"></g:submitButton> 

而在你的函數返回truefalse

+0

非常感謝你!但是,在實施您的建議後,仍然沒有發生任何事情,即使沒有通過驗證,仍然會進入下一頁。 – chemilleX3

+3

onsubmit處理程序應附加到表單標記,而不是submitButtom –

+1

@AnujArora是正確的。你可能有多個提交按鈕,你不想忘記其中之一的'onsubmit'屬性。 – vegemite4me