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