2012-04-07 74 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它不會增加額外的,因爲我重新開始新的驗證提交處理程序。