Конфликт делегата jQuery с другим делегатом в IE - PullRequest
3 голосов
/ 03 сентября 2010

Похоже, что в 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>

В этом конкретном случае обработчик дляфлажок не будет срабатывать.

Как обычно, проблема не отображается в других браузерах.

Изменение порядка вызовов может решить проблему, но может вызвать другую.Обратите внимание, что делегат работает на взаимоисключающих элементах, поэтому порядок не должен иметь значения.

Что вызывает это?

Ответы [ 3 ]

0 голосов
/ 11 апреля 2011

Похоже, что проблема была решена в последней версии jQuery или Internet-Explorer (на момент написания статьи 1.5 и 9 соответственно).

0 голосов
/ 03 мая 2011

Я тоже столкнулся с этим. По какой-то причине изменение порядка регистрации событий исправило это для меня. Я бы с удовольствием объяснил.

0 голосов
/ 22 января 2011

Я не могу предложить объяснение; но я столкнулся с похожим поведением в IE8. Как ни странно, в моем случае все работало хорошо, если я переставил привязки так, чтобы привязка делегата на одном из моих флажков была выше привязок делегата на других элементах формы. Делегированный обработчик кликов по ссылке до того, как обработчик флажка, похоже, не вызывал проблем.

В моем случае у меня был один обработчик щелчков на флажке, два обработчика изменений на полях выбора, два обработчика щелчков на переключателях, другой обработчик щелчков на флажках другого класса и несколько обработчиков щелчков на ссылках.

Существует множество переменных, которые необходимо учесть, и их трудно описать здесь. Например, делегированный селектор для флажка, который вызвал проблему для меня, был селектором идентификатора, в то время как селектор для безобидных флажков был классом.

...