2017-05-25 12 views
-1

基本的に私はこのようになります簡単な入力テキストフィールドを作成しようとしています:Javascript:入力に月と年を入力できますか?

MM/YYYY 

私はそうのようにこれを試してみた:

​​

しかし、一部のユーザーが夢中にして置くように見えますそこには奇妙な価値がある。

私は、javascripやjQueryを使用してMM/YYYYのようなフォーマットを維持するようにしています。

すべてのポインタが評価されます。

ANSWER:ここ

が、私はどのジョナスの答えの助けを借りて、まさに私が欲しいもののような働きを思い付いたものです:

https://jsfiddle.net/z2a7ydcj/4/

+0

...私はは上記を削除イネーブルすることをお勧めしますなぜ編集は、thatsの間、自動的に、しかし、これは問題を引き起こす可能性が二文字の後に入力クライアント側の/を追加しますフォーム –

+1

'<入力タイプ="日付 ">' – j08691

+0

@LelioFaieta、私はあなたが明確に質問を理解したとは思わない。 MM/YYYYのような入力フィールドをフォーマットする必要があります。検証は他の場所で行われます。 –

答えて

1

を行う前に、JSを使用して各入力をチェックすることができ:

<script> 
window.addEventListener("load",function(){ 
document.getElementById("someid").addEventListener("input",function(){ 
    this.value=this.value.split("/").slice(0,2).map((el,i)=>parseInt(el,10)&&i<2?el.slice(0,2+2*i):"").join("/"); 
    }); 
}); 
</script> 
<input id="someid" /> 

これはちょうど1234分の23を強制します。しかし、あなたはそれがより複雑になるかもしれない:

 var length=0; 
    document.getElementById("someid").addEventListener("input",function(){ 
    if(length>(length=this.value.length)) return; //enable deleting 
     var mapped=this.value.split("").map(function(char,i){ 
      switch(i){ 
       case 0: 
        return char=="1" || char=="0"?char:""; 
       break; 
       case 1: 
        return !isNan(parseInt(char,10))?(this[0]=="0"?char:(+char<3?char:"")):""; 
       break; 
       case 2: 
        return "/"; 
       break; 
       case 3: 
       case 4: 
       case 5: 
       case 6: 
        return !isNan(parseInt(char,10))?char:""; 
       break; 
       default: 
        return ""; 
       break; 
      } 
    },this.value); 
    if(mapped.length===2) mapped.push("/"); 
    this.value=mapped.join(""); 
}); 

それがその位置にある文字のための特別なrequirenmentsを気力ていない場合には0ですべての文字に置き換えられます。また、投稿する前に検証

http://jsbin.com/razupobamu/edit?output

+0

非常に近いが、まだ正しく動作していない:https://jsfiddle.net/z2a7ydcj/2/ –

+0

/自動的に追加する方法はありますか? –

+1

@DavidHope shure私はそれに取り組んでいます。また、私のコードの最新のレビューを見て、すでに多くのバグを改善しています –

3

HTML5は、pattern属性が付属しています。 - )

<input type="text" id="foo" pattern="(0[1-9]|1[012])/[0-9]{4}" placeholder="MM/YYYY"> 

ここでは、変更の入力をテストするいくつかのjqueryスクリプトがあります。それは

jQuery(document).on("change", "#foo", function(){ 
    pattern = new RegExp("/(0[1-9]|1[012])/([0-9]){4}/") 
    valid = pattern.test(jQuery(this).val()) 

    if(!valid){ 
    jQuery(this).val("") 
    } 
}) 

有効でないリセットはあなたが手動でフォームに入力をラップすることにより、フォームの検証をトリガーし、その上にcheckValidity()を呼び出すことができれば、それはfalseを返しますし、それは、すべての無効な入力をハイライト表示されますので、あなたはこれをチェックできます道の任意ajaxcalls

+1

いいえ、あなたはまだあなたが入力に好きなものを入力することができます。 https://jsfiddle.net/z2a7ydcj/ –

+0

フォームの送信時に機能しますが、ボックスに入力することもできます。 –

+0

私はフォームを使用しているとは言いませんでした!これはすべてのブラウザで動作するわけではなく、AJAXでは動作しません。 –

関連する問題