2

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

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

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

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

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

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

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

在实例化一个新的验证器之前,我已经完成了适当的清理工作,它可以在 Firefox 和 Chrome 中使用

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

我在 StackOverflow 上进行了广泛的搜索,虽然我想不出一个可行的解决方案,但我可以总结一些关于 IE 和 jQuery 的关键点

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

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

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

非常感激。

4

1 回答 1

1

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

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

改为只是一个普通按钮

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

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

于 2012-04-14T06:46:54.853 回答