Использование комбинированного окна IE, зависание при выборе - PullRequest
0 голосов
/ 22 сентября 2011

Я использую поле со списком, чтобы выбрать один из четырех школьных домов.

После того, как выбор сделан, я использую jQuery для запуска нескольких функций.

Одна из обязательных функций использует собственные пользовательские API нашего VLE. Ограничение на конкретный 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 ]

2 голосов
/ 15 октября 2011

Код Javascript запускается до того, как пользовательский интерфейс может обновляться.

Отложите вызов 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 голос
/ 15 октября 2011

На самом деле это еще не проверялось, но вы можете попробовать изменить HPAnalysisObject.initHPTotals( house_id, label ); на:

setTimeout(function() { HPAnalysisObject.initHPTotals( house_id, label ) }, 100);

Это должно позволить IE избежать события изменения.

Также при загрузке данныхзанимает очень много времени, то, возможно, вам следует изменить поведение раскрывающегося списка.Если какой-то пользователь допустит ошибку, вы загрузите данные, а затем загрузите другой набор.И поэтому вы можете добавить маленькую кнопку рядом с выпадающим меню и загрузить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...