Javascript传递值以在事件侦听器上运行

时间:2012-03-01 17:35:35

标签: javascript

如果我执行以下操作,变量将传递给附加的事件侦听器,其中我想要在添加事件侦听器时传递变量的值。

foo=a;    
document.addEventListener('mousedown', function() { doSomething(foo) }, false); 
foo=b;

doSomething(val){
alert(val);
}

因此它应警告“a”而不是“b”;

2 个答案:

答案 0 :(得分:7)

类似的东西:

var foo = 'a';    

document
.getElementById('foo')
.addEventListener('click', function(bar) {

  // return the actual event handler function
  return function() {
    doSomething(bar);
  };

}(foo) /* <-- call the anonymous function, passing in the current foo*/, false); 

foo = 'b';

function doSomething (val) {
  alert(val);
}​

演示http://jsfiddle.net/gS9wu/1/

答案 1 :(得分:0)

由于foo是全局的,因此在检测到事件之前会在第3行覆盖foo。

您可能需要考虑获取foo的值并将其存储在对象或插件或类似内容中,以将其从正常的代码流中抽象出来或将其传递给回调函数:

document.addEventListener('mousedown',(function(outerFoo){doSomething(outerFoo);})(foo),false);