2012-04-07 65 views
2

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

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

因此,我需要动态实例JQuery验证:

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在IE
  2. 事件存储在事件属性,我可以看到,我不能REM事件覆盖之前的提交事件。每次我实例化一个新的验证器时,一个额外的onsubmit事件被附加到表单上。

这些都是清理我都试过了,但不工作的IE7对我来说

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

大加赞赏。

回答

1

我得到了这个问题,通过改变提交按钮

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

,而不是只是一个普通按钮

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

和IE6它不会增加额外的,因为我重新开始新的验证提交处理程序。