2010-08-06 47 views
7

我覺得我已經做了很多次這種情況,它通常工作,所以我明顯缺少的東西。ASP.NET/JavaScript - 爲什麼不「返回錯誤」不能防止回傳?

這裏是我的服務器端ASP.NET按鈕:

<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" OnClientClick="foo_Click();" /> 

當中去是客戶上呈現爲:

<input type="submit" name="reallylongclientid" value="Foo" onclick="foo_Click();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(reallylongclientidandpostbackoptions, false, false))" id="reallylongclientid" class="button foo"> 

沒有意外出現。

這裏的驚喜,在我的JavaScript函數:

function foo_Click() { 
    return false; 
} 

好了,還有更多的比,但我把它砍下來證明這一點。

當我點擊按鈕時,它調用客戶端函數,並返回false。

但它仍然回發到服務器,爲什麼?

我基本上要做到這一點按鈕的點擊:

  1. 待辦事項客戶端驗證。
  2. 如果驗證通過,發回
  3. 如果不是,則在窗體上顯示一些錯誤消息。

當然,我可以改變這一個客戶端按鈕(INPUT TYPE =「按鈕」)和手動開球時,我想回發,但我不應該需要做的。或者我應該?

回答

17

return語句,這樣當你點擊按鈕,它return false這不允許提交表單

<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" 
OnClientClick="return foo_Click();" /> 
+0

知道這是明顯的(拍打頭部)。謝謝。 – RPM1984 2010-08-06 06:03:12

+0

我只注意到如果我做「var passedValidation = new Boolean(false); return passedValidation」它仍然回傳。但如果我只是返回false,它不會。 WTF?有任何想法嗎? – RPM1984 2010-08-06 06:12:11

+0

@ RPM1984:在布爾上下文中使用布爾型構造函數時,使用'new'關鍵字創建'Boolean' * object wrapper *,在JavaScript中,任何對象都被認爲是* truthy *,例如:'' !! new Boolean(false)'==>'true',我會建議你簡單地使用布爾值true或false,直接表示原始值... – CMS 2010-08-06 06:22:56