首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jquery 'change‘事件在IE中不起作用

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

Stack Overflow用户
提问于 2009-08-10 17:38:08
回答 2查看 2.7K关注 0票数 2

是的,我知道它在IE中不起作用,而使用'click‘起作用。但这是我的问题所在。

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

下面的代码在IE和Opera中的效果很不错:

代码语言:javascript
运行
复制
  if (jQuery('#city').length > 0) {
    jQuery('#city').change(function(){ populateCityListBox(); });
  }  

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

如何避免这种双重触发?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-10 17:43:15

问题是IE在元素失去焦点之前不会触发change事件。

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

另外,顺便说一下,在你的change回调中,如果你所做的只是调用它,那么你不需要把它包装在一个匿名函数中。

代码语言:javascript
运行
复制
jQuery('#city').change(populateCityListBox);

它的工作原理和你在那里所用的一样。

票数 2
EN

Stack Overflow用户

发布于 2009-08-10 17:52:58

这可能会起作用(虽然没有经过测试):

代码语言:javascript
运行
复制
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);
}

调整音程以适应你的感觉。另外-如果触发器(‘change’)技巧不起作用,尝试直接调用onchange方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1256201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档