JavaScript获取具有闭包功能的事件?

时间:2015-06-10 18:48:08

标签: javascript

嗨,我遇到问题,获取事件并将其传递给闭包函数,我也希望(这)变量

我用

   console.log(e);

显示未定义>>什么是最好的sloution:)

我试试这段代码

<script>
for(var i=0;i<a.length;i++){
a[i].addEventListener("keydown",(function(e){

return function(){
if (e.keyCode == 13 && !e.shiftKey){

console.log(e);   // e its undefined this is the problem 
console.log(i);   // its get i value no problem here 
//now iam use the closure for get i value
//var that = this;

}

};

 })(e), false);
 }
</script>

2 个答案:

答案 0 :(得分:1)

为什么不直接访问函数内的e

<script>
    a[i].addEventListener("keydown",(function(){
        var index=i;
        return function(e){
            if (e.keyCode == 13 && !e.shiftKey){
                console.log(this);
                console.log(e);
                console.log(index);
            }
        };
    })(), false);

Working

答案 1 :(得分:0)

不确定为什么需要关闭才能执行此操作。您可以使用function.prototype.apply来调用函数并指定this引用的内容。见这里:

function myFunction(e) {
    console.log('myFunction', 'event', e);
    console.log('myFunction', 'this', this);
}

var clickBait = document.getElementById('clickBait');

clickBait.addEventListener("click", function(e){
    e.preventDefault();
    myFunction.apply(e.target, [e]);
});

在这里工作小提琴:http://jsfiddle.net/ToddT/vnms6yL1/

如果你需要关闭,你至少可以说出原因吗?这会有所帮助。