我正在使用一个组合框来选择四所学校中的一所。
选择完成后,我正在使用jQuery运行一些函数。
其中一项必需功能利用了我们自己的VLE自定义API。我正在使用的特定API的限制意味着我们每次调用只能检索100个用户的信息。因此,对于一所1300人的学校,我不得不打26个电话(每个姓氏的初始电话一个)。
它足以满足需要的频率。我有一个加载GIF,它会保留到返回信息之前。
在FireFox中,这可以按预期工作,但在Internet Explorer 编辑:版本8 中,下拉菜单只会冻结,直到检索到信息为止。
有没有办法轻易纠正这个问题?我并不特别想要修改大部分代码 - 这个功能不会被大量使用。
widget.onLoad = function(){
HPAnalysisObject.init();
$('select#house_picker').change( function() {
var val = $(this).val();
val = val.split(",");
var label = val[0];
var house_id = val[1];
HPAnalysisObject.initHPTotals( house_id, label );
} );
}
HPAnalysisObject.initHPTotals = function(house_id, label) {
HPAnalysisObject.id_list = [];
$('div#display').html('<img src="/user/74/168586.gif" alt="LOADING..." />');
for (var i = 1; i <= 26; i++) {
initial = String.fromCharCode(64 + i);
Frog.API.get("users.search", {
"params": {"surname": initial, "group": house_id},
"onSuccess": HPAnalysisObject.addUsers
});
}
HPAnalysisObject.setLabel(label);
HPAnalysisObject.getHPTotals();
};
还有其他功能,但是这个Frog.API.get调用会减慢所有内容(它会使26个ajax调用......:)。
所以,基本上,我希望在调用之前我可以放置一些东西,允许组合框返回到未下拉状态,从而显示我的加载GIF。
Internet Explorer ^^
FireFox ^^
非常感谢。
答案 0 :(得分:2)
Javascript代码在允许更新UI之前运行。
将调用推迟到initHPTotals,以便在组合框折叠后执行Javascript代码,例如使用setTimeout。 10或20毫秒应该没问题:
$('select#house_picker').change( function() {
var val = $(this).val();
val = val.split(",");
var label = val[0];
var house_id = val[1];
setTimeout(function() {
HPAnalysisObject.initHPTotals( house_id, label );
}, 10);
} );
答案 1 :(得分:1)
尚未对此进行过测试,但您可以尝试将HPAnalysisObject.initHPTotals( house_id, label );
更改为:
setTimeout(function() { HPAnalysisObject.initHPTotals( house_id, label ) }, 100);
这应该允许IE逃避更改事件。
此外,如果加载数据需要很长时间,那么您可能应该更改下拉列表的行为。如果某个用户会犯错误,您将加载数据,然后加载另一组。因此,您可以在下拉菜单附近添加一个小按钮并加载onclick。