2010-03-26 100 views
0

這是我發現令人不安的東西。我創建了一個小表單,並且使用AJAX爲我進行驗證。我有一個JavaScript函數authenticate(),它有效地工作有時onsubmit()不起作用

<form method="post" action="" id="login_form" onsubmit="authenticate()";>

// various inputs

<input type="button" onclick="authenticate()" value="Log In">

</form>

authenticate()作品,當我按一下按鈕就好了。但是,如果我按下輸入的形式是提交了,並且它失敗。如果我調用onSubmit(),它也會失敗。在我的調試中,我提醒了即將發佈的文本 - 它們是相同的。但是,Prototype Ajax函數將其稱爲onSuccess,但服務器沒有響應。 (服務器輸出「成功」或「失敗」)。

爲什麼onClick()vs onSubmit()的不同行爲?完全相同的功能被稱爲,但結果是不同的。

任何幫助,將不勝感激。

--Dave

+0

'authenticate()'的預期副作用是什麼?您是否打算將表單發回到當前頁面的網址? – spoulson 2010-03-26 04:05:31

+0

您正在使用Prototype進行Ajax調用,爲什麼不進行事件處理?擺脫舊的內聯東西,並在表單上使用現代DOM事件處理程序。 – bdl 2010-03-26 04:59:15

回答

4

按鈕的onClick不提交表單。這只是一個在客戶端調用authenticate()的按鈕。

您的onSubmit事件將在表單提交時調用,但您可能沒有看到客戶端authenticate()的結果,因爲表單將立即發佈。目前尚不清楚功能的目的。

但是,如果authenticate()做了我的猜測,那麼您需要將該屬性更改爲onSubmit='return authenticate()'並讓該函數返回true/false。如果爲false,表單提交將被中止。

+0

「...表單會在...之後立即發佈」 我想我明白現在發生了什麼。我其實不想提交,但我喜歡錶單行爲,Prototype爲表單提供了一個很好的序列化函數。 謝謝! – 2010-03-26 05:34:38

+0

我們可以通過做按鈕的「onclick」函數來驗證表單,並且一旦驗證通過就可以提交表單。所以我們不需要使用submit()函數。 – pramodc84 2010-03-26 06:46:50