0

これが私のJSです

function validate(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]/;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}

スクリプトはinputタグ専用で、数字のみを入力できます。

グーグルクロームではうまく機能しますが、Firefox 15.0バックスペースでは、削除、矢印キーが機能しません

これはFirefoxのバグですか、それとも私のスクリプトに何か問題がありますか?

4

2 に答える 2

2

その理由は、ChromeとIEがこれらの特別なキー(バックスペース、削除、矢印キー)のキープレスイベントを発生させないためです。

ただし、Firefoxの場合、イベントが発生し、正規表現との一致に失敗したため、theEvent.preventDefault()実行されます。

于 2012-09-06T04:56:35.780 に答える
1

xdazzが言ったように:

var key = theEvent.keyCode || theEvent.which;

key押されたキーのASCIIコードです。バックスペースは8、削除は46です。

var key = theEvent.keyCode || theEvent.which;

これで、そのコードは文字に変換されます。バックスペースキーとDeleteキーは数値にマップされないため、正規表現によりデフォルトのアクションが阻止されます。

サーバーに送信されるまでフィールドの値を気にしないため、戦略に欠陥があります。したがって、ユーザーがフィールドを離れるときとフォームが送信されるときに(そして常にサーバーで)コンテンツを検証します。 。

ユーザーは、キーを押す以外のさまざまな方法でデータをフォームフィールドに入力できるため、フィールドの値(押されたキーではない)を使用して検証します。それははるかに単純で、エラーが発生しにくいです。

于 2012-09-06T05:08:45.990 に答える