如何将值传递到由事件触发的匿名函数中
How to pass values into anonymous function that is triggered by an event?
我在Kinetic中遵循代码.js:
function pacmanMove(x, y , duration, bate, color) {
var tween = new Kinetic.Tween({
node: group,
duration: duration,
x: x,
y: y,
onFinish: function() {
changeColor(color);
window[bate].remove();
}
});
return tween;
}
var eat = [];
for(var i = 0; i < linkItemsLen; i++) {
eat.push(pacmanMove(linkItems[i][2], 65, 1, linkItems[i][0], linkItems[i][4]));
window[linkItems[i][0]].on('mouseover', function() {
this.tween = eat[i];
this.tween.play();
});
}
我正在尝试将动态创建的补间传递到鼠标悬停事件中,但补间始终未定义,因此当触发事件时,我收到一条错误消息TypeError: 'undefined' is not an object (evaluating 'this.tween.play')
为什么?我该如何解决这个问题?
尝试使用闭包来捕获当前i
,并改用var
来创建私有变量。
for(var i = 0; i < linkItemsLen; i++) {
eat.push(pacmanMove(linkItems[i][2], 65, 1, linkItems[i][0], linkItems[i][4]));
window[linkItems[i][0]].on('mouseover', (function(index) { //create closure to capture current index.
return function(){
//Use var instead
var tween = eat[index];
tween.play();
}
})(i));
}
由于您在循环中附加事件处理程序,因此在循环结束时,i
等于eat
数组 => eat[i]
之外的linkItemsLen
返回undefined
。所有事件处理程序都会丢失当前i
。
使用相同的技术,您也可以将补间直接传递给函数:
for(var i = 0; i < linkItemsLen; i++) {
eat.push(pacmanMove(linkItems[i][2], 65, 1, linkItems[i][0], linkItems[i][4]));
window[linkItems[i][0]].on('mouseover', (function(tween) { //create closure to capture current eat[i].
return function(){
tween.play();
}
})(eat[i]));//Pass the current eat[i]
}
相关文章:
- 双条件jQuery函数事件
- 将函数事件绑定到更改函数的复选框/标签
- 从c#代码后面触发jQuery函数/事件
- 正在解码函数(事件){}的JavaScript语法
- 如何防止我的$('form').submit(函数(事件))应用于某些表单
- 访问PDF.js查看器函数/事件
- 从内部调用 JavaScript 函数事件
- JavaScript/jQuery调用函数事件
- jquery.live('点击',函数(事件)在页面加载时只工作一次
- 如何在JavaScript中跟踪回调函数事件
- 正确删除匿名函数事件处理程序
- jQuery:将 $(this) 传递给命名函数事件处理程序
- 函数(事件)变量是否可以不永久更改实例变量的内容
- Javascript函数事件没有按顺序触发
- 如何按类循环函数事件
- jQuery与对象的绑定函数'事件处理程序
- 函数(事件)在一个Opera上下文菜单扩展
- 用meteor.js响应式调用js函数/事件
- 缩短JavaScript函数事件
- 将onchange函数事件附加到变量