2010-11-19 122 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"); 
      }); 
});