2009-10-01 66 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偷看,它包含了你可以考虑有用的方法。

相关问题