5

電話番号の検証に取り組んでおり、入力を電話番号で自動フォーマットする必要があり、数字のみを追加できるようにする必要があります。ただし、キーダウンとキープレスを使用して入力を制限しようとすると、iPhone で # と * を入力できます。キーダウン値を確認すると、どちらもそれぞれ 3 と 8 で同じです (キーコード 51 と 56)。これは Android ブラウザーでは完全に機能しますが、iPhone では失敗します。

誰もが同様の問題に直面しました。

$(formSelector + ' input[name^="phone"]').on('keydown keypress',function (e) {         
    // Allow: backspace, delete, tab, escape, and enter  
    if ( e.keyCode == 46 || e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 27 || e.keyCode == 13 ||   
        // Allow: Ctrl+A  
        (e.keyCode == 65 && e.ctrlKey === true) ||   
        // Allow: home, end, left, right  
        (e.keyCode >= 35 && e.keyCode <= 39)
    ) {                
        // let it happen, don't do anything  
        return;  
    } else {  
        // Ensure that it is a number and stop the keypress  
        if (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57) && (e.keyCode < 96 || e.keyCode > 105 ) ) {  
            e.preventDefault();   
        }              

});  

また、入力を「input propertychange」イベントにバインドし、パターン マッチングを使用するために、stackoverflow で提案された別の方法を 1 つ試しました。しかし、これは IPhone では正しく動作しますが、Android では失敗します。

$(formSelector + ' input[name^="phone"]').bind('input propertychange', function() {  
   var text = $(this).val();  
   if (isNaN(text)) {  
       $(this).val(text.replace(/[^\d]/gi, ''));  
   }  
});

誰もこの問題の一般的な解決策を持っていますか??

前もって感謝します

4

3 に答える 3

5
  on('keydown keypress',function (e){});

まず、iOS では 2 回トリガーされ (理由はわかりません)、bindFireFox では失敗するため、単に$().keypress.

フィルタリングは、必要な数字の正しいキーコードを通過させていましたが、キャッチする必要のある文字をキャッチしていませんでした。最初は、 e.orginialEvent.keyIdentifier を使用して不正なキーを追跡するソリューションがありましたが、これは劇的に失敗しましたファイアフォックスで。

その問題の解決策を探しているときに、Firefox のキーコードと文字コードに関するこのページのコードを見つけて変更しました。

  $(formSelector).keypress(function (e) {
     var k = e.keyCode || e.charCode;
     var c = e.charCode;
     var isArrow = (c == 0 && k >= 37 && k <= 40);
     var isSpecial = ((k == 8) || (k == 9) || (k == 127)) || isArrow;   // backspace, tab, delete
     var isOK = (k >= 48 && k <= 57) ;  // numbers
     return isOK || isSpecial;
   });

ライブ バージョン:

良好なバージョン、テスト済み: iOS、Chrome、Firefox、テスト済み

keyIdentifier バージョン、失敗した: Firefox

于 2013-07-12T04:31:34.210 に答える
1

試す

<input type="number">

また

<input pattern="[0-9]">

于 2013-07-14T11:11:52.090 に答える
0

あなたがすることができます: <input oninput="filter(this,'1|2|3|4|5|6|7|8|9|0')">
そして、あなたのリストにこの機能を持ってください:
function filter(`obj,allowed) { var allowed = split("|");
var c = 0 for(c; c < allowed.length; c++) {
oqj.value=obj.value.replace(allowed[c],"")
}
}

于 2013-07-13T02:50:41.303 に答える