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然后press+将使其成为10/2/2009,但对后续加号没有影响。然后,如果我按下-它会转到9/30/2009而不是返回10/1/2009,并忽略随后的减号按键。

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

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

4

3 回答 3

1

你需要改变

var d = new Date();

var d = new Date(element.value);

并摆脱

d.getDate( element.value );

您还需要将您的return false;移到element.select()行后。

于 2009-10-01T17:23:24.130 回答
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每次都设置到明天。

于 2009-10-01T17:21:56.630 回答
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 页面,它包含您可以考虑的有用方法。

于 2009-10-01T17:23:58.763 回答