我目前正在使用 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 的关键点
- 您只能取消绑定与 jQuery.bind 绑定的事件
- IE 中的事件存储在 events 属性中,我可以看到我无法删除以前的 onsubmit 事件。每次我实例化一个新的验证器时,都会在表单上附加一个额外的 onsubmit 事件。
这些是我尝试过的清理方法,但不适用于我的 IE7
$('#myForm').removeAttr('onsubmit');
if( document.detachEvent ) {
document.getElementById('myForm').detachEvent('onsubmit', myFormSubmitHandler);
}
非常感激。