2010-10-15 52 views
0

任何人都可以在此找到任何錯誤或性能改進嗎?JavaScript實用程序,增加/減少到下一個15分鐘的時間間隔

<a href='#' id='from_arrow_down' onclick="timeOffset(-1,'from_time');">Click me</a> 

function timeOffset(offset,time_id) 
{ 

    // javascipt utility that increments/decrements to the next 15 minute interval. 
    // When user pushes a button, program will get time from input box, 
    // increment (offset=1) or decrement (offset=-1) to next (or previous) 
    // quarter hour and out value back to input box. 

    // This is used on handheld devices where keyboard is very small and input is  
    // difficult and time consuming. 

    var pass_time = document.getElementById(time_id).value; 
    var tempDate; 

    // break in to hours and minutes 
    var HH = pass_time.substr(0,2); 
    var MM = pass_time.substr(2,4); 
    // dummy date 
    try{ 
    tempDate = new Date("2000", "01", "01", HH, MM, "00", "0000"); 
    } 
    catch(err) 
    { 
    alert("invalid time (HHMM)"); 
    return; 
    } 

    // dummy minutes 
    var minutes = 999; 

    // iterate until we have reached an inter 
    while (minutes != 0 && minutes != 15 && minutes != 30 && minutes != 45){ 
    tempDate.setMinutes(tempDate.getMinutes() + offset); 
    minutes = tempDate.getMinutes(); 
    document.getElementById(time_id).value = cleanUp(tempDate.getHours()) + "" + cleanUp(tempDate.getMinutes()); 
    } 

} 

function cleanUp(d) 
{ 
    if (d < 10){ 
    d = "0" + d; 
    } 
    return d; 
} 
+0

描述你正在做什麼。代碼在很多方面都是錯誤的,我不知道從哪裏開始。 – some 2010-10-15 19:10:01

+0

我的眼睛...我的眼睛.... – 2010-10-15 19:23:18

回答

1

while循環對此非常不利。我會用setTimeout來代替 - 如果你需要的話,或者每增加一個你需要的增量,就會每秒調用一次。

+1

或setInterval(更好的是,將其設置爲一個變量,因此您可以輕鬆更新間隔長度) – Detect 2010-10-15 19:09:13

+0

我只能同意:這是非常低效的,並採取100%cpu和可能是這個頁面可能沒有更新。 – some 2010-10-15 19:12:24

+0

用戶喜歡按下按鈕時的視覺反饋。它只在按下時運行,然後不會超過15次。這是唯一的「在很多方面」? – robert 2010-10-15 20:25:39

0

是的,你可以計算到下一個區間的距離,然後在該值上運行while循環的內容。您不需要不斷地使用「分鐘」臨時值修改頁面內容。 E.D.,將分鐘轉換爲浮點數,除以15,使用floor/ceil函數遞減/遞增,然後再乘以15。這只是我的頭頂,它可能不適用於角落案件等。