event.preventDefault()在Chrome和Opera中不起作用

时间:2013-08-22 19:15:34

标签: jquery forms jquery-validate

我正在使用jQuery Validation Plugin 1.9.0和jQuery 1.7.2。

我想用jquery验证插件验证我的表单。 它在Firefox 20.0.1和IE 10中运行良好。 但是在Chrome(26.0.1410.64米)和Opera(12.14)中,我无法在我的表单中单击取消而不会阻止验证。

这是我的javascript代码:

 submitHandler: function(form) {
  if (this.submitButton.value != 'cancel') {
   $(form).hide();
   $('#load').show();
   $(form).submit();
  }
  else {
  event.preventDefault();
  }
 }

当我点击FF和IE上的取消时,我按照预期返回到我的网页主页,但是当我在Chrome和Opera中执行此操作时,我的错误消息会显示为表单未完整填写。 在这两种情况下都调用了event.preventDefault(),但似乎行为因导航器而异。

你知道可能出现什么问题吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

你误解了.preventDefault()的目的。它不是为了防止函数的默认行为。它用于取消常规元素的内置行为,即从锚标记中删除导航和历史记录等。

请参阅:http://api.jquery.com/event.preventDefault/

AFAIK,您不能以编程方式打开和关闭验证。使用.validate()初始化插件后,没有方法可以“取消”初始化它。

但是,要简单地使用“取消”按钮,有几种方法......一种方法是确保将<form></form>的取消按钮保留在之外,然后使用click处理程序用它来做其他事情。

DEMO http://jsfiddle.net/TZVA6/1

或者如Rocket Hazmat所指出的另一种方法是给button type="button"属性,以阻止默认的submit操作。

DEMO http://jsfiddle.net/TZVA6/2/