お世話になります。
タイトルについて、なにかいいアイデアがあれば教えていただきたいです。
現在の状況
type="number"が指定してあるクラスをページ内から取得し、そのクラス内でキーボードから入力された値が数字以外であれば、値を一つ前の情報に戻す処理を行う。という処理を実現したいのですが、うまく動いていないです。コードは下記です。
javascript
1document.addEventListener('DOMContentLoaded', function() { 2 const inputTypeNumberDoc = document.querySelectorAll("input[type='number']"); 3 inputTypeNumberDoc.forEach((matche) => { 4 matche.addEventListener('keydown',e => { 5 const val = matche.value; 6 console.log("eCode:"+e.code); 7 if(!((e.code=="Digit1")&&(e.code==="Backspace")&&(e.code=="Digit2")&&(e.code=="Digit3")&&(e.code=="Digit4")&&(e.code=="Digit5")&&(e.code=="Digit6")&&(e.code=="Digit7")&&(e.code=="Digit8")&&(e.code=="Digit9")&&(e.code=="Digit0")&&(e.key==1)&&(e.key==2)&&(e.key==3)&&(e.key==4)&&(e.key==5)&&(e.key==6)&&(e.key==7)&&(e.key==8)&&(e.key==9)&&(e.key==0))){ 8 setTimeout(() => { 9 if(!( (e.code==="Backspace")||(e.key=='1')||(e.key=='2')||(e.key=='3')||(e.key=='4')||(e.key=='5')||(e.key=='6')||(e.key=='7')||(e.key=='8')||(e.key=='9')||(e.key=='0') )){ 10 matche.value=val; 11 } 12 }) 13 }else{ 14 setTimeout(() => { 15 matche.value=val; 16 }) 17 } 18 }); 19 }); 20 }); 21
html
1<div class="col-md-3 col-lg-4"> 2 <input type="number" class="form-control form-control-lg inputTypeNumberDoc" id="capacity" name="capacity" value=""> 3 </div> 4input type="number"がページ内に複数あります。
コード内にある"digit"はe.codeを用いて数字を出力すると、その値になっています。
ナレッジの共有
数字以外の値(-マイナス
)などを入力し、hoge.valueで出力しようとすると値はnullが返ってきます。↓
__
入力した値{ 1-112-2}
hoge.valueを用いて出力した値{""}
__
e.keyやe.codeを用いて今回は実現できないだろうか...
・試したこと
下記ページと同じものを実装したがsafariでは挙動がおかしく適切な実装ができなかった。
(chromeでは正しく機能しました。)
input type="number" ハイフン除去サンプル
意外と知られていないtype="number"入力欄の5つの問題点
input要素のpattern属性を利用し制限をかけようとしたが、safariではpatten属性は利用できないみたいでした。
pattern属性について
以上になります。よろしくお願いいたします。

回答3件
あなたの回答
tips
プレビュー