2012-09-11 23 views
5

爲什麼以下在Fi​​refox中正常工作,但不是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; 
    } 
+1

的數據和索引值。根據文檔'我們可以通過使回調函數返回false來打破特定迭代中的$ .each()循環。返回非錯誤與for循環中的continue語句相同;它會立即跳到下一個迭代.' – MrOBrian

+0

嘗試使用return(fasle)作爲函數的回調函數。這應該解決您的問題,因爲它會像休息一樣起作用; –

+0

我試過'return false'和'return(false)'。這可以在Firefox上正常工作。但是,它在Chrome上無法正常工作。只有當我使用'返回true'時,Chrome才能正常工作......不確定? –

回答

3

這不是$.each問題,var a = {};是一個對象,$.each(a, function (secs, str) {})越來越莫名其妙,因爲失敗jQuery每個函數只接受一個數組。

需要將object轉換爲array然後使用$.each函數。

增加了新的代碼到函數體制作objectarray

// 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]); 
} 

,並修改如何訪問新創建的數組

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; 

} 
+1

這是行不通的。奇怪Chrome和FF如何處理它的不同。謝謝KK。 –