2015-06-10 50 views
-4

您好我havr与获取事件并将其传递给闭合功能问题也是我想要的(这个)varaibleJavaScript获取具有关闭功能的事件?

我使用

console.log(e); 

其显示未定义>>的SLOUTION什么最好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> 
+0

在你的上下文中,'this'应该指的是什么? – Todd

+0

电子应该是什么......你的事件?然后,您想要将该函数作为事件侦听器*传递,而无需使用e调用该函数。 – Shashank

+0

你的处理程序返回一个函数,该函数可以成功记录事件,但那个返回的函数永远不会被调用! – Bergi

回答

1

为什么不直接访问内部功能Ë

<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

+0

但(e)未定义这个问题 –

+0

@穆罕默德:'e'应该是什么? “keydown”事件的事件对象?如果是这样,这是正确的答案。看起来你对事件对象何时/如何传递给处理程序感到困惑。但是,再次,你的考试中没有任何事情确实需要一个IIFE。 –

+0

(y)感谢它的工作 –

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/

如果需要关闭,可你至少说为什么?这将有所帮助。

+0

iam更新问题检查它 –

+0

它看起来像你与其他解决方案。无论如何,仅供参考,我用多个标签更新了我的小提琴。我仍然不知道为什么你需要关闭它:http://jsfiddle.net/ToddT/vnms6yL1/2/ – Todd