2009-08-27 66 views
1

我有一個表格(signup.php),在一個nyroModal窗口彈出,當我點擊一個按鈕:使用Ajax驗證在nyroModal模態窗口提交

<input value="Edit" class="nyroModal" type="button" href="signup.php"> 

我想用某種形式的在提交表單之前,先進行AJAX驗證(例如檢查用戶名是否已被採用)。

我在注意以下事項:當用戶點擊「提交」按鈕。它調用javascript函數onClick將必需的字段發送到PHP腳本,該腳本返回字段是否有效。然後,如果該字段無效,它會通知用戶,但是當該字段有效時,它將通過類似$('#formid').submit();的內容提交表單。理論上足夠簡單。

問題是,當nyroModel得到從URL的新形式,並配合其內容的DOM創建一個div,火狐完全忽略任何<script>標籤。使用Firebug,我可以看到它實際上得到了響應的<script>標籤,但Firefox忽略它們。另外,我無法在調用模型的頁面上創建jQuery函數,因爲在創建文檔時,表單在DOM中不存在。

任何想法如何解決這個問題?

回答

1

嘗試添加提交處理程序的形式:

onClick='return frmSubmit()' 

在此處理程序,首先序列化格式的數據,並提交這驗證腳本。發出請求後請務必return false,因爲它是異步完成的。在響應回調中,您執行以下操作:如果響應表明輸入有效,則以編程方式使用.submit()-方法提交表單。但是,如果響應表明出現了問題(您將不得不以JSON格式提供反饋),請在表單上附加一些建設性反饋以供用戶閱讀。

不要忘記趕上按鍵事件,並防止形式從被按下時,輸入被提交,因爲它會繞過你的驗證功能。

而且,嗯,一個建議:它可能會更好做在客戶端驗證與啓動,這通常是不夠的。您可能聽說客戶端驗證可以被繞過,所以仍然需要進行服務器端檢查。但是,我總是覺得,如果用戶決定認真對待系統,那麼就沒有必要提供建設性的反饋意見。指示失敗的簡單消息就足夠了。所以,首先用簡單的Javascript檢查輸入。如果出現問題,請提供反饋。但是,如果服務器接收到無效輸入(這意味着客戶端驗證已被繞過),則只需通知用戶他失敗了。

+0

謝謝!在我的情況下,與客戶端驗證的問題是,它不能檢查用戶是否存在於數據庫中:)我現在正在工作,但我仍然困惑爲什麼Firefox(沒有測試過它在其他瀏覽器上,但我懷疑同樣會發生)不喜歡將

0

你可以使用類似:

onClick='javascript: return myValidationFuncion() 

如果你的函數會檢查該值是否有效, 即讓你的Web服務調用那裏。 如果這些值無效,則只需返回false以停止執行。

ķ

+0

謝謝,那個救回我的人生 –