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中,无论在哪个函数中放置,警报都能正常工作。
** //第二个编辑**
火狐,如预期运行
Internet Explorer中,b0rked
有谁知道什么可能被打破IE?
在此先感谢。
答
好的!我发现了这个问题。
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
我想这可能与html和css而不是javascript有关。你可以提供的HTML?也许是一个jsfiddle.net? – jackJoe
由于我正在使用的Frog API,JSFiddle将无法工作。我会用CSS更新原始文章,但是我已经获得了原始版本的文件(我重新编写了它,因为它是可怕的代码),它在IE中使用相同的HTML/CSS正确显示。 – dunc
如果你保存呈现的HTML,它在IE8中显示是否正确?另外,你是否得到任何js错误? – jackJoe