jquery - 取消绑定(bind)验证表单时无法分离 onsubmit 事件

标签 jquery internet-explorer validation

我目前使用的是jquery validate 1.8.1,我的目标浏览器是IE7。我在主页上有一个表单,表单元素是通过 AJAX 动态注入(inject)的。有一个下拉框管理表单中的元素,表单将根据此下拉框选择的内容提交不同的内容。

$('some_pane').load('/remote_location.html', ...);

因此,我需要动态实例化 jquery validate:

var myValidator;
myValidator = $('#myForm').validate();

myValidator.settings.submitHandler = myFormSubmitHandler;
$('#input1inMyForm').rules('add', .....)

当它在页面加载时第一次动态加载时,一切都很好,并且当表单提交时,myFormSubmitHandler 被调用一次。

但是,当用户在下拉框中选择另一个值时,就会出现问题,这会动态地将另一组元素注入(inject)到表单中,从而实例化一个新的验证器。

在实例化新验证器之前我已经进行了适当的清理,并且它可以在 Firefox 和 Chrome 中运行

$('#myForm').data('validator', null);
$('#myForm').unbind('submit');

我在 StackOverflow 上进行了广泛的搜索,虽然我无法找到可行的解决方案,但我可以总结一些关于 IE 和 jQuery 的要点

  1. 您只能取消绑定(bind)通过 jQuery.bind 绑定(bind)的事件
  2. IE 中的事件存储在 events 属性中,我可以看到我无法删除以前的 onsubmit 事件。每次我实例化一个新的验证器时,都会将一个额外的 onsubmit 事件附加到表单。

这些是我尝试过的清理方法,但不适用于 IE7

$('#myForm').removeAttr('onsubmit');
if( document.detachEvent ) {
    document.getElementById('myForm').detachEvent('onsubmit', myFormSubmitHandler);
}

非常感谢。

最佳答案

我通过更改提交按钮解决了这个问题

<input type="submit" .... >

改为普通按钮

<input type="button" .... >

在 IE6 中,当我重新启动新的验证器时,它不会添加额外的提交处理程序。

关于jquery - 取消绑定(bind)验证表单时无法分离 onsubmit 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055066/

相关文章:

jquery - 保护 JQuery 代码免受 XSS 攻击

javascript - 我怎样才能发现浏览器现在已经退出了

jquery - getResponseHeader 在 IE 8 中返回 null

jquery - 使用 jQuery 获得元素大小的几率为 50/50

javascript - 通过引用执行 Javascript 函数

javascript - angularjs IE9范围变量变得未定义

css - IE 中主要内容左侧的奇怪空格

api - RESTful API - 在请求中传递虚假/未请求的参数时的正确行为

c# - 拆分后验证电子邮件字符串

c# - ListView 绑定(bind)项上的 ValidationRules