好吧,每个人都已经解决了这个问题,但我觉得还没有更了解该怎么做。
我想要一个循环来设置一堆点击处理程序,并为每个处理程序提供唯一的参数。我现在正在做这样的事情:
for (thisThing in things){
myDiv=document.createElement('img');
myDiv.onclick=function(){
// do somehting!
// but don't do anything with "thisThing"
// because it's got the wrong value in it by the time you call it!
// but this function has to have the value of "thisThing" to work, dammit!
}
}
- 到处都说这个问题的解决方案是闭包 - 哇太棒了!除了闭包打破即(对吗?)
- 否则,我可以当场评估代码,在变量中进行烘焙,但这充其量看起来很难看,而且似乎可能会破坏一些东西
那么这给我留下了什么?倒闭好吗?评估好吗?我是唯一一个在网络上动态创建按钮的人吗?!?任何帮助都感激不尽。对于这个基本的问题感到抱歉,事实上,这是经常回答的问题。
此页面具有迄今为止我找到的最完整的答案,但是,它表明闭包始终是解决方案。诅咒!http://www.howtocreate.co.uk/referencedvariables.html http://www.howtocreate.co.uk/referencedvariables.html
关闭确实not破解IE。
(function(someThing) {
myDiv.onclick=function(){
// Access it as "someThing"
}
})(thisThing);
jsFiddle http://jsfiddle.net/alexdickson/vRjYb/.
问题是分配给的功能onclick
property 创建一个闭包,它可以访问其父变量。
当您准备好单击某个元素时,它thisThing
已增加到终止循环的最终值(在您的情况下迭代的最后一个属性),因为它访问外部变量,而不是副本。
通过使用新的自调用函数创建新的闭包并传递thisThing
,其值成为变量someThing
并且仅存在于内部函数内部。
这是缓解这个已知问题的方法之一。
请注意,在 IE6 和 7 中存在内存泄漏。咨询RobG https://stackoverflow.com/questions/6065880/pass-variables-to-an-event-javascript-no-closures-no-jq-avoid-evals-such/6065973#6065973 or 雷诺斯的回答 https://stackoverflow.com/questions/6065880/pass-variables-to-an-event-javascript-no-closures-no-jq-avoid-evals-such/6065902#6065902来解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)