2012-09-11 12 views
5

निम्नलिखित फ़ायरफ़ॉक्स में सही तरीके से क्यों काम करता है लेकिन क्रोम नहीं? अगर मैं .each loop में 'true' में वापसी मान बदलता हूं, तो यह क्रोम में काम करता है और फ़ायरफ़ॉक्स नहीं। क्या देता है?

(जब यह काम नहीं करता, यह केवल सही दिन बनाम सेकंड, घंटे, आदि में वापस आती है।)

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

के डेटा और सूचकांक मूल्य तक पहुंचने का तरीका डॉक्स के अनुसार 'हम कर सकते हैं संशोधित करने के लिए object बनाने के लिए समारोह शरीर में कोड कॉलबैक फ़ंक्शन को झूठी वापसी करके एक विशेष पुनरावृत्ति पर $ .each() लूप को तोड़ दें। गैर-झूठी रिटर्निंग लूप में जारी बयान के समान है; यह तुरंत अगले पुनरावृत्ति पर छोड़ देगा। – MrOBrian

+0

अपने फ़ंक्शन पर कॉलबैक के रूप में वापसी (फासल) का उपयोग करने का प्रयास करें .. इससे आपकी समस्या हल होनी चाहिए क्योंकि यह ब्रेक की तरह कार्य करेगा; –

+0

मैंने दोनों 'वापसी झूठी' और 'वापसी (झूठी)' दोनों की कोशिश की है। यह फ़ायरफ़ॉक्स पर सही ढंग से काम करता है। हालांकि, यह क्रोम पर सही ढंग से काम नहीं करता है। क्रोम केवल सही काम करता है जब मैं 'वापसी सच' का उपयोग करता हूं .. सुनिश्चित नहीं है? –

उत्तर

3

यह $.each समस्या नहीं है, var a = {}; एक वस्तु और $.each(a, function (secs, str) {}) है किसी भी तरह विफल हो रही jQuery प्रत्येक समारोह केवल एक सरणी स्वीकार करते हैं।

को object से array में परिवर्तित करने की आवश्यकता है तो $.each फ़ंक्शन का उपयोग करें।

जोड़ा नया 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]); 
} 

और भी नए बनाए गए सरणी

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

यह काम करता है। अजीब कैसे क्रोम और एफएफ इसे अलग-अलग संभालते हैं। धन्यवाद केके। –

संबंधित मुद्दे