2012-09-11 11 views
5

Aşağıdakiler neden Firefox'ta düzgün çalışıyor, ancak Chrome'da değil? .each döngüsündeki dönüş değerini 'true' olarak değiştirirseniz, Chrome'da çalışır ve Firefox'ta çalışır. Ne verir?

(Çalışmazsa zaman, sadece vb doğru gün vs saniye, saat içinde geri döner.)

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

verilerini ve indeks değeri Biz yapabilirsiniz erişmek için nasıl modifiye da 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]); } 

ve object yapmak için fonksiyon vücuda

Eklendi yeni kod Geriçağırım işlevinin yanlış döndürülmesini sağlayarak, $ .each() döngüsünü belirli bir yinelemede kırın. Yanlış olmayan döndürme, for döngüsündeki devam ifadesiyle aynıdır; – MrOBrian

+0

Fonksiyonunuzun geri dönüşü olarak geri dönüşü (fasle) kullanmayı deneyin. Bu, bir mola gibi davranacağı için probleminizi çözmelidir; –

+0

Her ikisini de 'return false' ve 'return (false)' denedim. Bu DOES, Firefox'ta düzgün çalışıyor. Ancak, Chrome'da doğru çalışmıyor. Chrome yalnızca 'true' değerini kullandığımda düzgün çalışıyor. Emin değil misiniz? –

cevap

3

O $.each sorunu değil, var a = {}; bir nesne ve $.each(a, function (secs, str) {}) olduğu her nasılsa başarısız oldu alıyorum jQuery her bir işlev sadece bir diziyi kabul eder.

object ürününü array ürününe dönüştürmek için $.each işlevini kullanın. `Docs göre yeni oluşturulan dizinin

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

Bu işe yarıyor. Chrome ve FF'nin bunu nasıl farklı şekilde ele aldığının tuhaflığı. Teşekkürler KK. –

İlgili konular