是的,我知道它在IE中不起作用并使用“点击”工作。但这是我的问题。
我有两个选择框 - 国家和城市。 选择国家/地区会填充城市选择框(并更新Google地图)。
以下代码就像IE和Opera中的魅力一样:
if (jQuery('#city').length > 0) {
jQuery('#city').change(function(){ populateCityListBox(); });
}
如果我使用'click'而不是'change',那么当我单击选择框箭头时,populateCityListBox()会被触发一次,而当我单击列表框元素时,会再触发一次。
如何避免这种双重触发?
答案 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方法