2010-03-26 106 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