Событие jquery 'change' не работает в IE - PullRequest
2 голосов
/ 10 августа 2009

Да, я знаю, что это не работает в IE, и использование «щелчка» работает. Но вот моя проблема.

У меня есть два поля выбора - Страна и Город. Выбор страны заполняет окно выбора города (и обновляет карту Google).

Следующий код работает как брелок в IE и Opera:

  if (jQuery('#city').length > 0) {
    jQuery('#city').change(function(){ populateCityListBox(); });
  }  

Если я использую «щелкнуть» вместо «изменить», то populateCityListBox () срабатывает один раз, когда я нажимаю стрелку окна выбора, и еще один раз, когда я щелкаю элемент списка.

Как мне избежать этого двойного срабатывания?

Ответы [ 2 ]

2 голосов
/ 10 августа 2009

Проблема в том, что IE не запускает событие change, пока элемент не потеряет фокус.

Простое решение может заключаться в том, чтобы отслеживать последнее значение выбора и разрешать выполнение функции только в том случае, если она отличается.

Кроме того, просто примечание: в вашем обратном вызове change вам не нужно заключать его в анонимную функцию, если все, что вы делаете, это вызываете ее.

jQuery('#city').change(populateCityListBox);

работает так же, как у вас там.

0 голосов
/ 10 августа 2009

это может сработать (но не проверено):

if ($.browser.msie) {
  var interval = 50;
  var changeHack = 'change-hac';
  var select = $("#viewByOrg");
  select.data(changeHack) = select.val();
  var checkVal=function() {
    var oldVal = select.data(changeHack);
    var newVal = select.val();
    if (oldVal !== newVal) {
      select.data(changeHack, newVal);
      select.trigger('change')
    }
    setTimeout(changeHack, interval);
  }
  setTimeout(changeHack, interval);
}

играть с интервалом, чтобы удовлетворить ваши чувства. также - если уловка триггера ('изменения') не сработает, попробуйте вызвать там метод onchange напрямую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...