5

数値のみを許可する必要がある入力にバインドされたイベントがあります。簡略化:

function (e) {
    if (-1 === [48,49,50,51,52,53,54,55,56,57].indexOf(e.keyCode)) {
        e.preventDefault();
    }
}

これは問題なく動作しますが、誰かが!, @, #,$などを入力した場合、keyCode は同じままで、イベントのデフォルトは妨げられません。

物理キーボードでは、これもチェックするだけで簡単に防ぐことができe.shiftKeyます。ただし、iOS仮想キーボードでは、これらの文字の一部 ( など$) も存在し<input type=number>、直接入力できます。e.shiftKeyそれらの keyCode は同じですが、まだ間違っているようです。

私に受け入れられる可能性のあるさまざまな解決策があります。

  • 仮想キーボード自体にこれらの文字を表示させないようにします (つまり、数字とピリオド/10 進数のみを表示します)。
  • 無効な仮想キーが押されたことを検出し、イベントの動作を抑制します
  • 無効な文字が入力の値に追加されることを決定し、この場合のイベントの動作を抑制します
  • その他?
4

1 に答える 1