2011-10-06 141 views
2

以下代碼按照FireFox中的預期顯示,但在Internet Explorer(v8)中完全不顯示。IE JS兼容性 - 在FF中工作?

 // 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)循環中,警報工作。如果我在該循環之後的任意位置放置警報,則不管是否使用變量名稱或隨機字符串(如"test"),都不會顯示警報。

在FF中,無論在哪個函數中放置,警報都能正常工作。

** //第二個編輯**

火狐,如預期運行 FireFox, working as intended

Internet Explorer中,b0rked Internet Explorer, b0rked

有誰知道什麼可能被打破IE?

在此先感謝。

+0

我想這可能與html和css而不是javascript有關。你可以提供的HTML?也許是一個jsfiddle.net? – jackJoe

+0

由於我正在使用的Frog API,JSFiddle將無法工作。我會用CSS更新原始文章,但是我已經獲得了原始版本的文件(我重新編寫了它,因爲它是可怕的代碼),它在IE中使用相同的HTML/CSS正確顯示。 – dunc

+0

如果你保存呈現的HTML,它在IE8中顯示是否正確?另外,你是否得到任何js錯誤? – jackJoe

回答

2

好的!我發現了這個問題。

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瀏覽器。

+0

不錯的一個!祝賀。 – jackJoe