IE JS совместимость - работает в FF? - PullRequest
2 голосов
/ 06 октября 2011

Следующий код отображается так, как задумано в FireFox, но не отображается вообще в Internet Explorer (v8).

        // getLimits init
        Frog.API.get('users.getInfo',
        {
            'params': {'id': UWA.Environment.user.id, 'details':'groups' },
            'onSuccess': AssignPoints.getLimit,
            'onError': function(err) { alert(err); }
        });

...

    // work out the user's limit, and how many points they've spent this week
    // use LEAP library if necessary
    AssignPoints.getLimit = function(data) {
        for (var i in data[0].groups) {
            if (data[0].groups[i].name.indexOf("LEAP") != -1) {
                AssignPoints.Limit = data[0].groups[i].name.substr(5,3);
            }
        }
/************** IT'S THIS LINE ONWARDS WHERE THE ALERTS SEEM TO BREAK IN IE */
        if (AssignPoints.Limit == 0) {
            AssignPoints.Specialist = true;
        }

        UWA.Data.getJson(AssignPoints.URL + "?cmd=getLimitsAndTotals&Giver_ID=" + AssignPoints.CurrentUser, AssignPoints.getPointsSpent); 
    }

    AssignPoints.getPointsSpent = function(data) {
        AssignPoints.SpentWeekly = data.SpentWeekly;
        AssignPoints.SpentTotal = data.SpentTotal;

        AssignPoints.displayLimitAndTotals();
    }

    // display data from getLimitAndTotals
    AssignPoints.displayLimitAndTotals = function() {
        var LimitsAndTotalsHTML = '<h2>Points Allocation</h2>';

        if (AssignPoints.Specialist == false) {
            LimitsAndTotalsHTML += '<ul><li>Weekly Limit: <strong>' + AssignPoints.Limit + '</strong></li>';
        } else {
            LimitsAndTotalsHTML += '<ul><li>Weekly Limit: <strong>Unlimited</strong></li>';
        }

        LimitsAndTotalsHTML += '<li>Spent this week: <strong style="color:#990000;">' + AssignPoints.SpentWeekly + '</strong></li>' + 
            '<li>Spent total: <strong>' + AssignPoints.SpentTotal + '</strong></li></ul>';

        $('div#limits').html(LimitsAndTotalsHTML);
    }

РЕДАКТИРОВАТЬ: CSS & HTML Я не думаю, что это проблема CSS / HTML, так как у меня есть предыдущая версия этого скрипта (которую я решил переписать, потому что это был отвратительный код и некоторая странная смесь процедурного и просто чистого текста), который правильно отображается в IE используя точно такой же HTML и CSS.

#total_container
{ overflow: hidden; width: 870px; }

#groups
{ width: 250px; float: left; padding: 10px; }
#right_container
{ width: 580px; float: left; padding: 10px; }

span.check
{ font-size: 10px; color: #666; }
span.err
{ color: red; font-weight: 700; }

#limits, #search_div
{ width: 270px; float:left; padding: 0 10px; }


#groups li, #groups ul
{ list-style-type: none; background: none; margin: 0; padding: 0; }
#groups li a
{ background-color: #999; color: #eee; display: block; margin: 5px 0; border: #666; padding: 8px 2px 8px 10px; width: 243px; }
#groups li a:hover
{ background-color: #990000; }

HTML-код просто <div id="limits"></div>, а JS обновляет его.

// РЕДАКТИРОВАТЬ

ВТОРОЕ РЕДАКТИРОВАНИЕ: ПРЕДУПРЕЖДЕНИЯ

Я пытался вставить в код случайные оповещения. В IE в цикле for (var i in data[0].groups) оповещения работают. Если я помещаю предупреждение в любой точке после этого цикла for, предупреждение не появляется вообще, независимо от того, использую ли я имя переменной или случайную строку, такую ​​как "test".

В FF оповещения работают независимо от расположения внутри любой функции.

** // ВТОРОЕ РЕДАКТИРОВАНИЕ **

FireFox , работает по назначению FireFox, working as intended

Internet Explorer, b0rked Internet Explorer, b0rked

Кто-нибудь знает, что может сломать IE?

Заранее спасибо.

1 Ответ

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

OK!Я обнаружил проблему.

IE не понравился этот сегмент кода:

    for (var i in data[0].groups) {
        if (data[0].groups[i].name.indexOf("LEAP") != -1) {
            AssignPoints.Limit = data[0].groups[i].name.substr(5,3);
        }
    }

Когда я изменил этот формат на:

        for (var i = 0; i < data[0].groups.length; i++) {
            if (data[0].groups[i].name.substr(0,4) == "LEAP") {
                AssignPoints.Limit = data[0].groups[i].name.substr(5,3);
            }
        }

Работает так, как задумано в FF и IE.

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