2009-10-01 41 views
0

我有一個用戶輸入日期的標準<input>文本框。我想添加一些功能,用戶可以輸入+-來從該值中添加/減去一天。我添加了一個onkeypress事件調用此函數:使用按鍵事件在文本框中調整日期

function adjustDate(element) { 
    var e = event || window.event; 
    var code = e.charCode || e.keyCode; 

    switch(code) { 
     case 43: // user pressed "+" (plus) 
      if(isDate(element.value)) { 
       var d = new Date(); 
       d.getDate(element.value); 

       d.setDate(d.getDate() + 1); 
       element.value = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getYear(); 
      } else { 
       var today = new Date(); 
       element.value = (today.getMonth() + 1) + "/" + today.getDate() + "/" + today.getYear(); 
      } 

      if(e.preventDefault) e.preventDefault(); 
      else e.returnValue = false; 
      return false; 

      element.select(); 

      break; 
     case 45: // user pressed "-" (minus) 
      // ... 
    } 
} 

isDate功能我脫下谷歌和作品,但如果需要,我可以張貼這一點。

我的問題是有一次,那麼nada的作品。例如,如果文本框的值爲10/1/2009,則按+將使其爲10/2/2009,但對後續加號沒有影響。然後,如果我按-它會去9/30/2009,而不是回到10/1/2009,並忽略隨後的減按鍵。

我在測試IE8。這是一個內部網絡應用程序,所以其他瀏覽器會很好,但不一定是必需的。我目前沒有使用jQuery或任何其他框架,而這可能是矯枉過正,所以我正在尋找一個純粹的Javascript解決方案。事實上,這個功能只是一個「很好有」,而不是我需要花費更多時間的東西。

我知道我要麼失去了一些東西,要麼完全錯誤。那它是哪一個?

回答

1

您需要更改

var d = new Date(); 

var d = new Date(element.value); 

,擺脫

d.getDate(element.value); 

您還需要將您的return false;element.select()行之後。

+0

謝謝。那就是訣竅。 – 2009-10-01 17:36:28

0

看起來它只是錯誤的邏輯在這裏:

var d = new Date(); 

d.getDate(element.value); // HERE: what is this suppose to do? 

d.setDate(d.getDate() + 1); 
element.value = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getYear(); 

你基本上設置element.value明天每次。

0

您示例中的getDate()方法不帶參數。它返回該月的一天。所以請嘗試在構造函數中分配'當前'日期值。

試試這個:

if(isDate(element.value)) { 
    var d = new Date(element.value); 
    d.setDate(d.getDate() + 1); 
    element.value = d.toDateString(); 
} else { 
    element.value = new Date().toDateString(); 
} 

也給w3c page偷看,它包含了你可以考慮有用的方法。

相關問題