2010-08-06 63 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