Javascript IE组合框用法,选择时冻结

Javascript IE组合框用法,选择时冻结,javascript,jquery,combobox,Javascript,Jquery,Combobox,我用一个组合框从四所学校中选择一所 完成选择后,我将使用jQuery运行一些函数 所需功能之一使用我们的VLE自己的定制API。对我使用的特定API的限制意味着每次调用只能检索100个用户的信息。因此,对于一所1300人的学校,我必须为每个姓氏的首字母打26个电话 根据需要的频率,它工作得足够好。我有一个正在加载的GIF,它会一直保存到信息返回为止 在FireFox中,这项功能可以正常工作,但在InternetExplorer编辑:版本8中,下拉菜单会冻结,直到检索到信息为止 有什么方法可以很容

我用一个组合框从四所学校中选择一所

完成选择后,我将使用jQuery运行一些函数

所需功能之一使用我们的VLE自己的定制API。对我使用的特定API的限制意味着每次调用只能检索100个用户的信息。因此,对于一所1300人的学校,我必须为每个姓氏的首字母打26个电话

根据需要的频率,它工作得足够好。我有一个正在加载的GIF,它会一直保存到信息返回为止

在FireFox中,这项功能可以正常工作,但在InternetExplorer编辑:版本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^^

火狐^^


非常感谢。

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);
    } );

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);
    } );

还没有真正测试过这一点,但您可以尝试更改HPAnalysisObject.initHPTotals house_id,label;致:

这应该允许IE逃避更改事件


另外,如果加载数据需要很长时间,那么您可能应该更改下拉列表的行为。如果某个用户出错,您将加载数据,然后再加载另一组。因此,您可以在下拉列表附近添加一个小按钮,然后单击load onclick。

还没有真正测试过这一点,但您可以尝试更改HPAnalysisObject.initHPTotals house\u id,label;致:

这应该允许IE逃避更改事件


另外,如果加载数据需要很长时间,那么您可能应该更改下拉列表的行为。如果某个用户出错,您将加载数据,然后再加载另一组。因此,您可以在下拉菜单附近添加一个小按钮,然后单击load onclick。

什么是VLE?奇怪的bug,如果移动$'divdisplay'.html;在$'selecthouse\u picker'内。在调用HPAnalysisObject.initHPTotals house\u id、label之前进行更改;虚拟学习环境。它有自己的一套API来访问我们学校中央信息系统中的信息——学生姓名、UPN、班级、表单组等。我现在就来试试。嗨,max,移动代码没有什么区别。干杯。一次显示所有数据有什么限制吗?换句话说,你能不能让它按字母顺序分页,或者干脆在选择房子和进行API调用之间强制选择首字母?它本身并不能解决问题,但至少会否定它。嗨,克里斯-这正是我通常会做的,但问题在于VLE从我们的中央信息系统提取信息的方式:它每次呼叫只能检索多达100个用户的信息。甚么是VLE?奇怪的bug,如果移动$'divdisplay'.html;在$'selecthouse\u picker'内。在调用HPAnalysisObject.initHPTotals house\u id、label之前进行更改;虚拟学习环境。它有自己的一套API来访问我们学校中央信息系统中的信息——学生姓名、UPN、班级、表单组等。我现在就来试试。嗨,max,移动代码没有什么区别。干杯。一次显示所有数据有什么限制吗?换句话说,你能不能让它按字母顺序分页,或者干脆在选择房子和进行API调用之间强制选择首字母?它本身并不能解决问题,但至少会否定它。嗨,克里斯-这正是我通常会做的,但问题在于VLE从我们的中央信息系统提取信息的方式:它每次呼叫只能检索大约100个用户的信息。