0

ユーザーが日付を入力する標準の<input>テキストボックスがあります。+ユーザーが値を入力したり-、値から 1 日を加算/減算したりできる機能を追加したいと思います。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)
            // ...
   }
}

私がGoogleから引っ張ってきたisDate機能ですが、必要に応じて投稿することもできます。

私の問題は、作品が一度、次に灘です。たとえば、テキストボックスの値が の場合、10/1/2009を押す+と になりますが10/2/2009、その後のプラスには影響しません。次に、押す-と に9/30/2009戻るのではなく に移動し10/1/2009、その後のマイナスキーの押下を無視します。

私はIE8でテストしています。これは内部 Web アプリであるため、他のブラウザーが適していますが、必ずしも必要というわけではありません。私は現在、jQuery やその他のフレームワークを使用していません。これはおそらくやり過ぎなので、純粋な Javascript ソリューションを探しています。実際、この機能は単に「あると便利」であり、私がもっと時間を費やす必要があるものではありません.

私は何かを見逃しているか、完全に間違っていることを知っています。それで、それはどれですか?

4

3 に答える 3

1

変更する必要があります

var d = new Date();

var d = new Date(element.value);

そして取り除く

d.getDate( element.value );

return false;行の後にto を移動する必要もあります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 に答える