0

これは私の現在のコードであり、ユーザーが入力したときに入力から$、コンマ、ドットを除くすべての非数値文字を削除します。

<input type="text" id="price" name="price" onkeyup="updatePrice(this.value)">

function updatePrice(p) {
    document.getElementById("price").value = p.replace(/[^0-9$.,]/g, '');
    }

問題は、文字を入力すると文字が削除されるため、Aと入力すると、文字が消える前にほんの一瞬だけ表示されることです。キーダウンは、入力が実際に変更される前にスクリプトを実行するため、適切ではありません。

これらの禁止文字が入力に表示されないようにするにはどうすればよいですか?

4

2 に答える 2

1
  • 入力がフォーカスを失ったときに検証を実行するために使用onblurします-ユーザーは入力中にこれを意識する必要はありません。
  • ユーザーはこれをまったく意識する必要はありません。送信時に検証を実行できます。
于 2012-04-24T06:19:34.537 に答える
1

keypressイベントとblurイベントの組み合わせを使用して、各キーと文字列全体を検証できます。入力typeをbeingに変更するtype="number"と、ユーザーエージェントは、値が最新のブラウザーで有効な数値形式であることを確認します。

// on key press occurs before the text is added visually to the input field
​document.getElementById('price').addEventListener('keypress', function(e) {
  if(!String.fromCharCode(e.which).match(/[0-9$\.,]/)) {
    e.preventDefault(); // not a valid character so cancel it
  }
}, false);​​​​​​​​​​​​​

// complete validation for the text that was entered on blur to update price
document.getElementById('price').addEventListener('blur', function(e) {
  var validated = parseFloat(this.value.replace(/[^0-9\.]g/, ''));
  // ... use the validated string to do something
}, false);

</ p>

于 2012-04-24T06:53:57.203 に答える