2010-09-03 68 views
3

看來,在IE中,一些委託可能以某種方式導致另一個委託失敗。jQuery的委託與IE中的另一個委託發生衝突

這是一種可能的情況:

<html> 
<head> 
    <script src='jquery-1.4.2.min.js'></script> 
    <script> 
    $(function() { 
    $('#main') 
    .delegate('div', 'click', function() { 
    alert('on div!'); 
    }) 
    .delegate('[name=first]', 'change', function() { 
    alert('first!'); 
    }) 
    .delegate('[name=second]', 'change', function() { 
    alert('second!'); 
    }) 
    ; 
    }); 
    </script> 
</head> 
<body> 
    <div id="main"> 
    <input name="first" /> 
    <input name="second" type="checkbox" /> 
    <div>Test</div> 
    </div> 
</body> 
</html> 

在這種特定情況下,該複選框處理程序將不會觸發。

像往常一樣,問題不會顯示在其他瀏覽器。

更改通話單可能會解決問題,但有可能導致另一個問題。請注意,委託工作在互斥元素上,所以順序應該是不相關的。

這是什麼原因造成的?

回答

0

似乎問題已在最新版本的jQuery或Internet Explorer中得到解決(截至撰寫本文時分別爲1.5和9)。

0

我不能提供解釋;但我在IE8中遇到過類似的行爲。奇怪的是,在我的情況下,如果我重新排列了綁定,那麼一切運行良好,因此我的一個複選框上的委託綁定來自其他表單元素上的委託綁定。在複選框處理程序之前,鏈接上的委託單擊處理程序似乎不會導致問題。

在我的情況中,我在複選框上有一個點擊處理程序,在選擇框上有兩個變更處理程序,在單選按鈕上有兩個點擊處理程序,在另一類複選框上有另一個點擊處理程序,以及在鏈接上有幾個點擊處理程序。

有很多變數需要考慮,並且這裏很難解釋所有變量。例如,對我造成問題的複選框的委託選擇器是一個id選擇器,而無害複選框的選擇器是一個類。

0

我也遇到過這個問題。出於某種原因,顛倒註冊事件的順序爲我解決了這個問題。儘管我很喜歡解釋。