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没有在我的函数中定义,因为范围没有通过,所以我想知道如何链接它们而不必两次查找元素。

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);
                                          ^^^

事件处理程序不接收第二个参数,因此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 回答