-2

次の2つのステートメントを44回繰り返すループを作成する必要があります。

    window.onload = function() {
        var input1 = document.getElementById("alpha1");
        var input2 = document.getElementById("alpha2");
        var input3 = document.getElementById("alpha3");
        input1.onkeypress = alphaFilterKeypress;
        input2.onkeypress = alphaFilterKeypress;
        input3.onkeypress = alphaFilterKeypress;
    };
4

2 に答える 2

1

問題はありません。

for (var i = 1; i < 45; i++) {
    var input = document.getElementById("alpha" + i);
    input.onkeypress = alphaFilterKeypress;
}
于 2013-03-25T15:48:05.737 に答える
1

これを44回ループする代わりに、イベントを委任してみませんか?単一のリスナーを接続し、IDが特定のパターンと一致するかどうかを確認します

document.body.addEventlistener('keypress', alphaFilterKeypress, false);

関数定義を変更する必要があります-このチェックを追加します:

function alphaFilterKeypress(e)
{
    e = e || window.event;
    var target = e.target || e.srcElement;
    if (!target.id.match(/alpha[0-9]+/))
    {//don't handle the event
        //event was fired on an element with another (or no) id
        return e;//don't handle it here
    }
    //an element with id alpha[number] fired the event
    //handle the event
}

この前のSOの質問からわかるように、使用している「キー」イベントのタイプは重要です。keypressイベントがバックスペースやコントロールなどのキーを取得しない場合は、イベントの使用をお勧めしますkeydown
それをいじって、どのイベントスイートがあなたのニーズに最も適しているかを考えてください

于 2013-03-25T15:50:44.337 に答える