2010-11-19 64 views
82

我正在研究一個ASP.net Web應用程序。如何在提交按鈕onclick事件中取消表單提交?

我有一個表單提交按鈕。提交按鈕的代碼看起來像<input type='submit' value='submit request' onclick='btnClick();'>

我想寫的東西像下面這樣:

function btnClick() { 
    if (!validData()) 
     cancelFormSubmission(); 
} 

我該怎麼辦呢?

+0

哎喲,這讓我頭疼。我有幾個不同的'submit'輸入。我想我會嘗試在這個頁面上使用服務器端控件。 – 2010-11-19 16:39:46

+1

可能重複的[如何防止表單被提交?](http://stackoverflow.com/questions/3350247/how-to-prevent-form-from-being-submitted) – 2014-09-29 19:26:54

回答

146

你最好做...

<form onsubmit="return isValidForm()" /> 

如果isValidForm()回報false,那麼你的形式不提交。

你也應該從內聯移動你的事件處理程序。

document.getElementById('my-form').onsubmit = function() { 
    return isValidForm(); 
}; 
+0

不錯,但是我似乎無法使用'onsubmit'在我使用ASP.net的時候工作,因爲asp.net將所有東西都封裝在它自己的窗體中... – 2010-11-19 16:30:46

+5

您可以使用他的第二個建議。無論如何,內聯JavaScript是魔鬼。 – Stephen 2010-11-19 16:32:03

+3

如果您使用的是ASP。NET網絡表單(提示:不),那麼不要試圖包含其他表單。它們簡直不相容。我聽說ASP.NET MVC允許您使用慣用標記來構建Web應用程序。 – Quentin 2010-11-19 16:32:40

0

使用onclick='return btnClick();'

function btnClick() { 
    return validData(); 
} 
+2

點擊回車將繞過檢查。使用onSubmit – Cfreak 2010-11-19 16:29:55

0
function btnClick() { 
    return validData(); 
} 
+1

有必要做比這更多的工作。我試圖讓functino返回true或false,它似乎沒有任何區別。 – 2010-11-19 16:29:30

+1

他的回答是正確的。 Upvoted。您還必須在輸入標籤中返回它 – Cfreak 2010-11-19 16:32:15

+1

另外,我寧願使用'ev.preventDefault()'或'ev.returnValue = false'來取消默認行爲,但不防止事件冒泡,以防其他控件觀察到同一元素上的相同事件。只有當你想停止冒泡**和**取消默認動作時才使用'return false'。 請參閱[本文](http://javascript.about.com/library/bldom21.htm)。 – 2010-11-19 16:34:37

11

您需要更改

onclick='btnClick();' 

onclick='return btnClick();' 

cancelFormSubmission(); 

return false; 

這就是說,我會盡量避免內部事件贊成unobtrusive JS與庫(如YUI或jQuery的)的屬性,有一個好的活動處理API並將其與真正重要的事件聯繫起來(即,表單的提交事件,而不是按鈕的點擊事件)。

+0

使用onclick將允許用戶擊中輸入並繞過檢查。 – Cfreak 2010-11-19 16:30:21

34

您輸入改成這樣:

<input type='submit' value='submit request' onclick='return btnClick();'> 

而且在你的函數返回false

function btnClick() { 
    if (!validData()) 
     return false; 
} 
1

爲什麼不改變提交按鈕到正規的按鈕,並在單擊事件,提交表單如果它通過你的驗證測試?

e.g

<input type='button' value='submit request' onclick='btnClick();'> 

function btnClick() { 
    if (validData()) 
     document.myform.submit(); 
} 
+1

點擊回車將繞過支票。使用onSubmit – Cfreak 2010-11-19 16:29:39

+0

然後,如果JavaScript不可用,它將無法工作。 Build on things that work。 – Quentin 2010-11-19 16:29:42

0

你需要onSubmit。不是onClick否則有人可以按輸入,它會繞過你的驗證。至於取消。你需要返回false。下面的代碼:

<form onSubmit="return btnClick()"> 
<input type='submit' value='submit request'> 

function btnClick() { 
    if (!validData()) return false; 
} 

編輯的onsubmit所屬的表單標籤。

+0

這不起作用。如果數據有效,則不會返回true。把迴歸正確;在btnClick()函數的末尾 – NickSoft 2013-11-08 07:21:28

3

您需要return false;

<input type='submit' value='submit request' onclick='return btnClick();' /> 

function btnClick() { 
    return validData(); 
} 
4

你應該類型更改從submitbutton

<input type='button' value='submit request'> 

,而不是

<input type='submit' value='submit request'> 

那麼你可以在javascript和準你想要的任何行動,它

var btn = document.forms["frm_name"].elements["btn_name"]; 
btn.onclick = function(){...}; 

爲我工作 希望它可以幫助你的按鈕的名稱。

0

很簡單,只是返回false;

下面的代碼使用jQuery ..

if(conditionsNotmet) 
{ 
return false; 
} 
3

有時onsubmit不會與asp.net工作順利提交按鈕的onclick內。

我用非常簡單的方法解決了這個問題。

如果我們有這樣一個形式

<form method="post" name="setting-form" > 
    <input type="text" id="UserName" name="UserName" value="" 
     placeholder="user name" > 
    <input type="password" id="Password" name="password" value="" placeholder="password" > 
    <div id="remember" class="checkbox"> 
    <label>remember me</label> 
    <asp:CheckBox ID="RememberMe" runat="server" /> 
    </div> 
    <input type="submit" value="login" id="login-btn"/> 
</form> 

現在,您可以捕捉得到的形式回發之前該事件,並從回傳阻止它,做所有你想用這個jQuery的阿賈克斯。

$(document).ready(function() { 
      $("#login-btn").click(function (event) { 
       event.preventDefault(); 
       alert("do what ever you want"); 
      }); 
});