为什么以下在Firefox中正常工作但不是Chrome?如果我将.each循环中的返回值更改为"true",则它适用于Chrome而非Firefox.是什么赋予了?
(当它不起作用时,它只会在几秒钟内返回,而不是正确的日期,小时等).
function time_remaining(expire_time)
{
var now = new Date().getTime()/1000,
time_left = expire_time - now,
time_left_str = '0 seconds';
if (time_left < 1) {
return time_left_str;
}
var a = {};
a[ 12 * 30 * 24 * 60 * 60 ] = 'year',
a[ 30 * 24 * 60 * 60 ] = 'month',
a[ 24 * 60 * 60 ] = 'day',
a[ 60 * 60 ] = 'hour',
a[ 60 ] = 'minute',
a[ 1 ] = 'second';
$.each(a, function (secs, str) {
var d = time_left / secs;
if (d >= 1) {
var r = Math.round(d);
time_left_str = r + ' ' + str + ((r > 1) ? 's' : '');
return false;
}
});
return time_left_str;
}
Run Code Online (Sandbox Code Playgroud)
这不是$.each问题,var a = {};是一个对象,并且$.each(a, function (secs, str) {})以某种方式失败,因为 jQuery 每个函数只接受一个数组。
需要转换object为array然后使用$.each函数。
在函数体中添加了新代码以object进行array
// converting object to array
var temp = [];
var finalArr = [];
for (val in a) {
temp.push(val);
}
temp = temp.sort(function (a, b) {
return a - b
});
for (var i = 0; i < temp.length; i++) {
finalArr.push(a[temp[i]] + "|" + temp[i]);
}
Run Code Online (Sandbox Code Playgroud)
并修改了如何访问新创建的数组的数据和索引值
function time_remaining(expire_time) {
var now = new Date().getTime() / 1000,
time_left = expire_time - now,
time_left_str = '0 seconds';
if (time_left < 1) {
return time_left_str;
}
var a = {};
a[12 * 30 * 24 * 60 * 60] = 'year',
a[30 * 24 * 60 * 60] = 'month',
a[24 * 60 * 60] = 'day',
a[60 * 60] = 'hour',
a[60] = 'minute',
a[1] = 'second';
// converting object to array
var temp = [];
var finalArr = [];
for (val in a) {
temp.push(val);
}
temp = temp.sort(function (a, b) {
return a - b
});
for (var i = 0; i < temp.length; i++) {
finalArr.push(a[temp[i]] + "|" + temp[i]);
}
$.each(finalArr, function (secs, str) {
var time = time_left / parseInt(str.split("|")[1], 10);
if (time >= 1) {
var randomNum = Math.round(time);
time_left_str = randomNum + ' ' + str.split("|")[0] + ((randomNum > 1) ? 's' : '');
return true;
}
});
return time_left_str;
}
Run Code Online (Sandbox Code Playgroud)