2012-07-19 17 views
6

キー入力とコピーの両方の日付を入力してテキストボックスに貼り付けるときにjavascriptまたはjQueryを動的に検出して変更する方法はありますか?日付を挿入する際の動的スマート日付マスク

月など2桁の機能を持つテキストボックスを作成しようとしています。

月は1から番号にすることができますので - 私は私がやろうとしているトリックは、しかし、最初のときにテキストボックスで1または0

する最初の桁を強制する12数値が2〜9の場合はフォーカスを取得し、ユーザーが数字を入力すると、最初の点を自動的に0にし、2番目の点を9に自動で入力します。私は、 "2" は

02/__/_____ 
を取得する必要があります入力した場合、私は "1"

1_/__/_____ 

を入力した場合

__/__/_____ 

:私は何も入力する前に

この日付の入力はそうのようになります。

「22」と入力すれば

02/2_/_____ 

私は「77」と入力した場合、私はコードまたはすでにこのまたは前の記事へのリンクがないツールへのリンクとの回答では非常に興味がある

07/07/_____ 

を取得する必要がありますか?

最終的には、2011年7月7日または2011年7月7日または2011年7月7日にマスクされた状態にしたいと思います。最後の最終版では、今年の年をデフォルトにしようとしていますが、10年ごとにドロップダウンします。

+2

エンドユーザーの観点から見ると、これらの種類のものは非常に厄介なものです。もちろんこれは私の意見です。私はこれらを行うための最善の方法についてのアドバイスを得るために、ユーザーエクスペリエンススタックエクスチェンジをチェックします。彼らは既にそこに完全な解決策を持っているかもしれません。 –

答えて

2

なぜユーザーの入力ではなく、テキストボックスのぼかしにリスナーをアタッチしないでください。

"1"と入力したときに突然入力が開始されたときに、入力時に入力した内容にゼロを追加したり削除したりしたとします。

var dayInput = document.getElementById("day-input"); 
// usually, I'd just use event-listeners, but feel free to refactor 
dayInput.onblur = handleDayOrMonth; 

function handleDayOrMonth() { 
    var el = (this === window) ? event.srcElement : this, 
     number_string = el.value; 

    // checking that it's an actual number 
    if (!isNaN(parseInt(number_string)) { 
     if (number_string.length === 1) { el.value = "0" + number_string; } 
    } 
} 

年を処理することは、それが何であれ、開始位置に「20」を追加することを除いて、まったく同じになります。

jQueryを自由に使用できます。私はあなたが欲しい機能がjQuery Masked Input plugin

デモで提供されていることを信じてい

+0

入力がマスクされている場合、ユーザーエクスペリエンスに影響を与えるべきではありません。 RetroCoder

+1

はい。理想的な経験は、あなたがその問題に遭遇している場合は、ユーザーが希望する方法で値を入力させてから、サーバーのフォームのPOSTの期待どおりの結果にフォーマットすることです。 これらのフォーマットを実際に強要する唯一の時間は、次の場合です。a)隠れた検証を実行しない、またはb)経験の正当な部分(時計やタイマーの0を埋め込むようなもの)。 – Norguard

+0

私はその考えが好きです。私は、ズームアウトされたビューが、「ズームアウト」のように表示されているのを見てきました。 – RetroCoder

2

http://jsfiddle.net/SO_AMK/SEXAj/

は、それはまた、数字だけを許可することに注意してください。

+0

私はすでにこのjavascriptを使用しています。賞品の説明を再度読んだ場合、要件は明確になります。 – RetroCoder

+0

私はkeydownイベントでバインドできました。 jsfiddleありがとう。私は惜しげもなくあなたに50ポンドを授与しています。 – RetroCoder

+0

ありがとうございます。申し訳ありませんが、私は以前は返答していませんでしたが、私はより良い解決策を持っていなかったので、何か言っても意味がありません:) –

関連する問題