Javascript:使用按键事件调整文本框中的日期

Javascript:使用按键事件调整文本框中的日期,javascript,textbox,date,keypress,Javascript,Textbox,Date,Keypress,我有一个标准的文本框,用户可以在其中输入日期。我想添加一些功能,用户可以在其中输入+或-以从值中添加/减去一天。我添加了一个调用此函数的onkeypress事件: function adjustDate( element ) { var e = event || window.event; var code = e.charCode || e.keyCode; switch( code ) { case 43: // user pressed "+" (

我有一个标准的
文本框,用户可以在其中输入日期。我想添加一些功能,用户可以在其中输入
+
-
以从值中添加/减去一天。我添加了一个调用此函数的
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
功能我从Google上取下并可以使用,但如果需要,我也可以发布它

我的问题是工作一次,然后娜达。例如,如果文本框的值为
10/1/2009
,则按
+
将使其成为
10/2/2009
,但对后续的加号没有影响。然后,如果我按
-
,它将转到
9/30/2009
,而不是返回到
10/1/2009
,并忽略随后的减号键

我正在测试IE8。这是一个内部的web应用程序,所以其他浏览器会很好,但不一定需要。我目前没有使用jQuery或任何其他框架,这可能会有点过头,所以我正在寻找一个纯Javascript解决方案。事实上,这个功能只是一个“好东西”,我不需要花更多的时间


我知道我不是错过了什么,就是做错了。那么它是哪一个呢?

看起来这只是错误的逻辑:

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();
基本上,每次都将
元素的值设置为明天。

需要更改

var d = new Date();

摆脱

d.getDate( element.value );
您还需要移动
返回false
元素后面。select()
行。

示例中的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();
}

也给出了一个PEEK,它包含了你可以考虑的有用的方法。

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();
}