2017-01-25 9 views
2

私は現時点でCCバリデーションテンプレートを作成していますが、標準ドロップダウン/別のテキストフィールドを使用して月/年の有効期限フィールドを選択することは残念ながらこの特定のプロジェクトのカードではありません。MM-YYYYテキストフィールドに " - "または "/"文字を自動的に挿入しますか?

代わりに、有効期限をキャプチャするための1つのテキストフィールド(MM-YYYYの形式)を使用したいと考えていますが、これを書いて顧客に " - "月/年の間に "/"を付けます。

代わりに、顧客が「02」と入力すると、その後ろにハイフンまたはスラッシュが自動的に表示されます。その後、顧客が年を越えてバックスペースをとっている場合は、ハイフン/スラッシュも削除して、月データを簡単に編集できるようにする必要があります。

これを達成するための適切な解決策がありますか?それともあなた自身のものを転がす場合ですか?

+0

https://github.com/RobinHerbots/Inputmask – hackerrdave

+1

CSSで? – 31piy

+2

私はあなた自身を動かすことをお勧めします。私は過去に似たようなことをしてきましたが、それほど難しくありません。実際には、このようなことのための大きな運動です。ここにあなたを起動させるページがあります。https://learn.jquery.com/plugins/basic-plugin-creation/ – nurdyguy

答えて

1

はこれを試してみてください、私はhttps://jsfiddle.net/dhruv1992/6fk8fb1v/

<input type="text" id="dateofbirth"> 

日 jqueryの

$("#dateofbirth").on('keyup',function(event){ 
    var key = event.keyCode || event.charCode; 
    if (key == 8 || key == 46) return false; 
    var strokes = $(this).val().length; 
    if(strokes === 2 || strokes === 5){ 
     var thisVal = $(this).val(); 
     thisVal += '/'; 
     $(this).val(thisVal); 
    } 
}); 
+0

「8」と「46」は何を表していますか?私は知っていますが、次のプログラマーは知っていますか? 'this.value.length'が何百倍も速いときに' $(this)).val()。length'を使うのはなぜですか?実際には 'this.value + ="/";"を実行できるときに '$(this) 'を3回作成していますが、それ以外にバックスペースが必要な場合はどうなりますか?あなたが 'keyCode 8 'をブロックしたので私はできません。基本的に私が言っているのは、これはプログラマーとユーザーの両方にとって非常に不愉快なことです。実際にはかなりの成果です。 –

+0

私は自分のコードをもっと明確にしました。申し訳ありませんが、私はショートカットを好きではありません。 –

+0

コードが不明です。まったく。プログラマにではなく、ブラウザーにも、なぜなら不要な計算をしなければならないからです... –

1

これはかなりの粗であるために作成された(しかし、少なくとも、あなたの要件を実装ん)。たぶん

https://jsfiddle.net/justinwyllie/ntdwc1qt/

$('#cc').on('input', function() { 
    var v = $(this).val(); 
    if (v.length == 2) { 
     $(this).val(v + '-'); 
    } 

    if (v.length == 3) { 
     $(this).val(v.substring(0,2)); 
    } 


}) 

少なくともキーストロークを検出しようと、この組み合わせとdhruvのGuptaの答えは?仕事が終わっ

+0

MDN https:// developerによると、btw入力はバックスペースで起動しないので理想的ではないかもしれません。モジラ。org/ja-ja/docs/Web/Events/input –

+0

あなたのコメントをお寄せください:これは、あなたが提供したリンクに従って、IE9の場合にのみ当てはまります。私にはうまく見えます。 –

0

<input type="month" />

+0

@Nietはどのブラウザで動作していますか?私はこれをFirefox 51で動作させることはできません。 – Rounin

+0

@Rounin Firefoxが新しいIEであるため、[基本的にFirefox以外のものすべて](http://caniuse.com/#feat=input-datetime) –

+0

ハハ。ああ。私はChromiumが好きなのと同じ理由でFFが好きです;-)そして、FF54がサポートしていることをキャニウスから見ています。正しいcaniuseページ(私は検索しましたが、_datetime_はありません)をありがとう。 – Rounin

0

私は@ 31pyの2つのテキストボックスを持っていると思っていました。ここで

2つのテキスト入力ボックスを使用して一つのアプローチは以下のとおりです。次の2つのテキストボックスがあり、それらをマージしていないのはなぜ

var inputMonth = document.querySelector('input[placeholder="mm"]'); 
 
var inputYear = document.querySelector('input[placeholder="yyyy"]'); 
 
var enteredDate = document.getElementsByTagName('p')[0]; 
 

 
function updateEnteredDate() { 
 

 
    enteredDate.textContent = ''; 
 

 
    if (inputMonth.value.length > 0) { 
 
    \t enteredDate.textContent += inputMonth.value; 
 
    } 
 

 

 
    if ((inputMonth.value.length > 1) && (inputYear.value.length < 1)) { 
 

 
    \t if (document.activeElement === inputMonth) { 
 
    \t  enteredDate.textContent += '-'; 
 
    \t  inputYear.focus(); 
 
    \t } 
 

 
    \t else if (document.activeElement === inputYear) { 
 
    \t  inputMonth.focus(); 
 
    \t } 
 
    } 
 

 
    if (inputYear.value.length > 0) { 
 
    \t enteredDate.textContent += '-'; 
 
    \t enteredDate.textContent += inputYear.value; 
 
    } 
 

 
} 
 

 
inputMonth.addEventListener('keyup', updateEnteredDate, false); 
 
inputYear.addEventListener('keyup', updateEnteredDate, false); 
 
window.addEventListener('load', function(){inputMonth.focus();}, false)
p { 
 
height: 72px; 
 
margin: 0; 
 
padding: 0; 
 
line-height: 72px; 
 
font-size: 72px; 
 
font-weight: bold; 
 
}
<p></p> 
 

 
<form> 
 
<input type="text" size="2" maxlength="2" placeholder="mm" /> 
 
<input type="text" size="4" maxlength="4" placeholder="yyyy" /> 
 
</form>

関連する問題