6

テキスト入力で文字「。」を変更する必要があります。入力中に「、」に。IE では、keypress イベントの keyCode イベント プロパティを次のように変更します。

document.getElementById('mytext').onkeypress = 
 function (evt) {
  var e = evt || window.event;
  if (e.keyCode && e.keyCode==46)
   e.keyCode = 44;
  else if (e.which && e.which==46) {
   e.which = 44;
  }
 };

しかし、Firefox ではキー イベントに入力された文字を変更することはできないようです。助言がありますか?

4

5 に答える 5

5

これを試して。すべてのブラウザで動作します。

window.onload = function () {
    var input = document.getElementById("mytext");

    input.onkeypress = function () {
        var evt = arguments[0] || event;
        var char = String.fromCharCode(evt.which || evt.keyCode);

        // Is it a period?
        if (char == ".") {
            // Replace it with a comma
            input.value += ",";

            // Cancel the original event
            evt.cancelBubble = true;
            return false;
        }
    }
};

更新: PierLuigiは上記の問題を指摘しました。テキストの最後にないケアレットの位置は処理されません。値にテキストを挿入している場合でも、コマンドを最後に追加します。

解決策は、コンマを追加する代わりに、コンマキーのキー押下イベントをシミュレートすることです。残念ながら、さまざまなブラウザで合成イベントをディスパッチする方法は、さまざまなものを示しているようで、簡単なことではありません。私はそれのための素晴らしいそして一般的な方法を見つけることができるかどうか見るでしょう。

于 2008-10-20T12:20:05.100 に答える
2

Event オブジェクトのすべてのプロパティは不変であると仮定します。DOM 仕様では、これらの値を手動で変更したときに何が起こるかについては触れていません。

必要なロジックは次のとおりです。すべての主要なイベントをリッスンします。ピリオドの場合は、イベントを抑制し、カーソル位置にカンマを手動で追加します。(これは、カーソル位置に任意のテキストを挿入するためのコード スニペットです。)

event.preventDefault();を呼び出して、Firefox でイベントを抑制します。これは、このイベントに関連付けられたデフォルトのアクション (この場合は文字の入力) を続行しないようにブラウザーに指示します。event.returnValueに設定して、IE でイベントを抑制しfalseます。

期間でない場合は、ハンドラーから早めに戻ります。

于 2008-10-20T14:51:46.773 に答える
1

技術的には、すべてのドットをコンマに置き換えたいだけです。

document.getElementById('mytext').onkeyup = function(){
    this.value = this.value.replace('.', ',');
}
于 2008-10-20T13:25:21.677 に答える
1

Document Object Model Eventsの公式ドキュメントを見ると、マウス イベント フィールドは読み取り専用として定義されています。そこではキーボード イベントは定義されていません。Mozilla はこのポリシーに従っていたと思います。

つまり、基本的には何か巧妙なトリックがない限り、イベントを思い通りに変更することはできません。JS HTML エディターのように、おそらくキーをインターセプトし、キャレットがある場所に char (未加工または変換済み) を挿入する必要があります。

于 2008-10-20T15:12:47.123 に答える
0

これは本当にその場で行う必要がありますか? フォームに投稿したり、データベースに送信したりするために情報を収集している場合、送信されたデータを変更した方がよいのではないでしょうか? そうすれば、ユーザーは紛らわしい変更を見ることはありません。

于 2008-10-20T15:00:00.673 に答える