1

私は単純なイベントリスナーを持っていますが、それを解析thisして関数に渡す必要がありますが、方法がわかりません。

これは私がこれまでに持っているものです:

var inpt = document.getElementById('curq');
inpt.addEventListener("keyup", function(e,max){ int_inpt_only(e,max); } , false);

function int_inpt_only(e,max) {
                this.value = this.value.replace(/[^0-9]/g,'');
                if(this.value > max) this.value = max;
                if(this.value<1)this.value=1;
}

thisスコープが実行されないため、問題は関数で定義されていないため、要素を2回検索せずにリンクする方法を考えています。

4

2 に答える 2

2

使用Function.call:

inpt.addEventListener("keyup", function (e) {
    int_inpt_only.call(this, e, 100);
}, false);

デモ


投稿されたハンドラー ロジックには、ちょっとした癖もありました。

inpt.addEventListener("keyup", function(e,max){ int_inpt_only(e,max); } , false);
                                          ^^^

イベント ハンドラーは 2 番目の引数を受け取らないため、max未定義です。


または、それがイベント ハンドラーが行うすべてであり、レキシカル スコープ (外部スコープで定義されているなど) を介しint_inpt_onlyて変数にアクセスできる場合は、代わりに関数参照をイベント ハンドラーとして渡すだけです。max

inpt.addEventListener("keyup", int_inpt_only, false);

デモ

于 2013-07-09T22:12:48.657 に答える
1

次のようにイベント ハンドラーを割り当ててみてください。

inpt.addEventListener("keyup", 
    function(e, max) { int_inpt_only.apply(this, [e, max]); } , false);
于 2013-07-09T22:13:26.863 に答える