2015-06-10 48 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