我目前使用的是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 的要点
- 您只能取消绑定(bind)通过 jQuery.bind 绑定(bind)的事件
- 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/