jquery'change'事件在IE中不起作用

时间:2009-08-10 17:38:08

标签: jquery

是的,我知道它在IE中不起作用并使用“点击”工作。但这是我的问题。

我有两个选择框 - 国家和城市。 选择国家/地区会填充城市选择框(并更新Google地图)。

以下代码就像IE和Opera中的魅力一样:

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

如果我使用'click'而不是'change',那么当我单击选择框箭头时,populateCityListBox()会被触发一次,而当我单击列表框元素时,会再触发一次。

如何避免这种双重触发?

2 个答案:

答案 0 :(得分:2)

问题在于IE在元素失去焦点之前不会触发更改事件。

一个简单的解决方案可能是跟踪select的最后一个值,并且只允许函数在不同时执行。

另外,只是旁注,在你的change回调中,如果您正在调用它,则无需将其包装在匿名函数中。

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

与你在那里的工作方式相同。

答案 1 :(得分:0)

这可能有用(虽然未经过测试):

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方法