0

現在、javascriptメソッドのテキストボックスで大文字を強制しようとしています。このメソッドは、「keypress」イベントで呼び出されてテキストボックスに入るように設定されています。

IEとFFの検出で大文字に変更する私の方法は次のとおりです。

          //some code to detect the kind of key pressed based on numeric value, 
          //if lowercase detected then continue

        var key; 
        if(window.event){ //working IE code                     
                //key = window.event.keyCode;
                window.event.keyCode-=32;
        }

        else if(e){ //broken FF code
                key = String.fromCharCode(keycode).toUpperCase()
                e.value = e.value.toUpperCase();
        }

この現在のコードは、e.valueがfirebugで未定義であることを示しています。e.toUpperCase()だけを試してみると、firebugはtoUpperCaseが存在しないと言っています。e.valueを'key'に設定しようとしました。これはエラーを返しませんが、大文字に変更されません。私はe.whichを直接変更しようとしましたが、もちろん、それは読み取り専用であり、そのようなことを示すエラーを返します。

私はここで何が欠けていますか?ここで何を変更しても問題はないと思います。たとえば、これはまだ小文字の値として設定されています。また、編集できないため、元の小文字のe。どの文字がテキストボックスにプッシュされています。

4

2 に答える 2

1

私はこれを別の方法で行うと思います:

function keypressHandler() {
  this.value = this.value.toUpperCase();
}

document.getElementById('whatever').onkeypress = keypressHandler;
// or use addEventListener or whatever

実際に編集すると、次のハックで少しうまく機能します。

function keypressHandler(event) {
    var inp = this;
    setTimeout(function() {
        inp.value = inp.value.toUpperCase();
    }, 0);
}

これにより、値が「固定」される前に、イベントの原因となったキーが値に追加されます。

重要なのは、キーボードイベントの処理はかなり面倒であり、ブラウザによって状況が異なるということです。上記のアプローチは、ブラウザによって維持されている値を直接操作するだけで、それを完全に回避します。

編集—ここのコードが機能するには、このコードと同じようにイベントハンドラーを設定する必要があることに注意してください。HTMLマークアップの「onkeypress」属性で設定する場合は、異なる必要があります。

<input onkeypress='keypressHandler.call(this)'>
于 2012-08-02T19:02:00.500 に答える
1

KeyEventsvalueにはプロパティがありません。このスニペットを使用してキーを検出したり、キーストロークの検出について読んだりすることもできます。

また、イベントプロパティは(一般に)読み取り専用であることに注意してください。現在のイベントが別のキーで余分なイベントをトリガーしないようにする必要があります。

要素に入力されたすべてを大文字にするために<input>、キーイベントを変更する必要はありません。文字が表示されたら、入力自体の値を変更するだけです。そのためのイベントのkeyup代わりにリッスンする必要があります(理由を読んでください):keypress

inputEl.onkeyup = function(e) {
    this.value = this.value.toUpperCase();
};

jsfiddle.netでのデモ)。これはシンプルですべてのブラウザで機能しますが、唯一の欠点は、キーを押したまま複数の文字を挿入したときにすぐに大文字にならないことです(回避策)。

于 2012-08-02T19:06:09.480 に答える