是的,我知道它在IE中不起作用,而使用'click‘起作用。但这是我的问题所在。
我有两个选择框-- Country和City。选择国家/地区将填充城市选择框(并更新google地图)。
下面的代码在IE和Opera中的效果很不错:
if (jQuery('#city').length > 0) {
jQuery('#city').change(function(){ populateCityListBox(); });
} 如果我使用' click‘而不是'change',那么当我单击选择框箭头时会触发一次populateCityListBox(),当我单击列表框元素时又会触发一次。
如何避免这种双重触发?
发布于 2009-08-10 17:43:15
问题是IE在元素失去焦点之前不会触发change事件。
一个简单的解决方案可能是跟踪select的最后一个值,并且只允许函数在不同的时候执行。
另外,顺便说一下,在你的change回调中,如果你所做的只是调用它,那么你不需要把它包装在一个匿名函数中。
jQuery('#city').change(populateCityListBox);它的工作原理和你在那里所用的一样。
发布于 2009-08-10 17:52:58
这可能会起作用(虽然没有经过测试):
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方法
https://stackoverflow.com/questions/1256201
复制相似问题