IE JS兼容性 - 在FF中工作?

问题描述:

以下代码按照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

好的!我发现了这个问题。

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