这样的,我做了个事件分发器
for (i=0;i<ele.length;i++) { ele[i].addEventListener('touchstart',Touchstart(eles[i]),false);}
ele和eles是两组数列,ele[i]和eles[i]是有关系两个div,第一组是ele[0]是‘开枪’,eles[0]是'爆头'?,第二组是ele[1]是‘换弹’,eles[0]是'停止'?,我想点击'开枪'div的时候发出,Touchstart('爆头'),但是发现,两组listen事件都发出了Touchstar(eles[i]),用alert(i)发现都是3。。。尝试各种办法无效,只能求助各大神
另外发现如果使用xxx?.addEventListener('touchstart',Touchstart,false),然后建立Touchstart(name){alert(name)},发现那么是个toucheven,然后name.type是touchstart,是否有指令能知道该name的主人就是xxx是那个元素?
大神出手赐教感激不尽!
//我想你应该是想点击ele[i]的时候, 运行Touchstart, 并把eles[i]作为参数传进Touchstart里面吧 //不考虑闭包, 也应该是 for (i = 0; i < ele.length; i++) { ele[i].addEventListener('touchstart', function () { Touchstart(eles[i]); //这里又有闭包的问题, 会造成每次点击传进去的eles都是最后一个 }, false); } //按照本来的写法, 你还没点, 在程序运行的时候已经Touchstart(eles[i])了 //最后解决: for (i = 0; i < ele.length; i++) { ele[i].addEventListener('touchstart', (function (x) { return function () { Touchstart(eles[x]); }; })(i), false); }
######非常感谢大神不嫌菜鸟解囊相救,我写问题的时候写错了我想用个匿名函数包裹Touchstar的。如果使用封包效果会更好?无论怎样再次感谢!######因为执行事件的时候循环已经走完了 所以i一直是最后一个 新定义一个变量等于i就行了######大神能详细一点不?因为我也想过用新变量但是在for里面怎么可以每次都换一个新变量呢?例如当i=0时abc=i,当i=1时def=i,addEventListener('touchstart',Touchstart(abc/def)但这样就要预先弄和i数量相等的新变量,比较麻烦喔,具体怎么实现呢?######恭喜,你将了解到闭包了######是的,恭喜你,你可以名正言顺的去学习下闭包以及如何解决for循环中闭包传参的问题。另外,addEventListener的第二个参数应该是一个函数,你这样直接调用不好吧?所以你还得加深下在javascript中函数也是一个变量的概念。研究不透,就不要往下走了。######谢谢指路######LZ是要做cs/cf/csgo/css/csp的作弊器么######只是个栗子,如果真有作弊器肯定叫大神你来内测,可惜我只是用来扫雷的######闭包在前面等着你,一头扎下去吧###### 在循环里定义事件回调,回调参数必须是副本而不能是引用。
回调的执行是异步的,回调保持着对外部变量的引用,等到回调执行时,变量早已被更改,所以参数必须以副本形式。
可以用IIFE解决。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。