IE组合框使用,冻结选择

时间:2011-09-22 14:27:51

标签: javascript jquery combobox

我正在使用一个组合框来选择四所学校中的一所。

选择完成后,我正在使用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 ^^ Internet Explorer

FireFox ^^ FireFox

非常感谢。

2 个答案:

答案 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。