在Dojo中不惜一切代价阻止表单提交

时间:2012-08-11 04:53:14

标签: forms dojo

我正在开发一个简单的Dojo应用程序。我的表单有点问题。 我有一个这样的表格:

<form data-dojo-type="dijit.form.Form" data-dojo-attach-point="loginForm" method="POST">
      <label for="${id}_login">Login</label>
      <input name="login" id="${id}_login" data-dojo-attach-point="login" data-dojo-type="dijit.form.ValidationTextBox" data-dojo-props="required:true"/>
      <label for="${id}_password">Password</label>
      <input name="password" id="${id}_password0" data-dojo-attach-point="password" data-dojo-type="app.ValidationPassword" />
      <input type="submit" data-dojo-attach-point="loginButton" data-dojo-type="app.BusyButton" label="Login!" />
</form>

在我的应用程序中:

 this.loginForm.onSubmit = function(e){

   // Do Ajax calls etc.
   // ..

   // Prevents actual submission
   return false;
 }

但是,如果任何在“返回false”之前Javascript出现错误,则表单实际提交,这会导致错误(我的节点应用将返回Cannot POST /login因为没有为该URL定义POST操作。)

如何让1000%确保表单未在任何情况下提交?我知道我可以完全摆脱标签,因为我用Ajax做所有事情,但是......那么我就不会得到好的data = that.loginForm.getValues();。 (我的意思是,毕竟是表格)

(注意:我对非javascript降级不感兴趣,真的。该应用程序是一个1页的ajax应用程序,如果用户没有AJAX,没有必要让它工作))

1 个答案:

答案 0 :(得分:2)

preventDefault将阻止浏览器执行默认操作(即:提交)。

this.loginForm.onSubmit = function(e){
  e.preventDefault();

  // Do Ajax calls etc.
  // ..
}

有关详细信息,请参阅here