所有,这是什么导致'未捕获的类型错误:无法调用未定义'错误的方法'动画?
请参见下面的代码:
function menu() {
this.menuitem=[];
this.submenu=[];
this.menuitem[0] = $('div#sivname1');
this.menuitem[1] = $('div#divname2');
this.submenu[0] = $('div#submenu1');
this.submenu[1] = $('div#submenu2');
this.active = false;
this.timeout;
}
menu.prototype = {
animatedown: function(submenu) {
submenu.animate({top: '99px'}, 200);
},
animateup: function(submenu) {
submenu.animate({top: '-4px'}, 200);
}
}
var menu = new menu();
z=2;
while(z--) {
console.log(z);
menu.menuitem[z].hover(
function() { //mouseover
if(menu.active) {
clearTimeout(menu.submenu[z].data("timeout"));
}
else {
menu.animatedown(menu.submenu[z])
};
},
function() { //mouseleave
$(this).data("timeout", setTimeout(function({
menu.animateup(menu.submenu[z])
},200));
menu.active = false;
}),
menu.submenu[z].hover(
function() { //mouseover
menu.active = true;
if (menu.menuitem[z].data("timeout")) {
clearTimeout(menu.menuitem[z].data("timeout"));
};
},
function() { //mouseleave
$(this).data("timeout", setTimeout(function() {
menu.animateup(menu.submenu[z]);menu.active = false;
},200));
});
}
此代码提供了以下错误:
Uncaught TypeError: Cannot call method 'animate' of undefined
而且奇怪这是我补充一下:
z=0;
到代码的底部它将正常工作。我希望它在没有z = 0的情况下工作,我不知道为什么当我添加它时会这样做。任何人都可以解释吗?
的问题是在封闭,下面的代码工作:
z=1;
while(z--){
(function(z) {
console.log(z);
menu.menuitem[z].hover(
function(){ //mouseover
if(menu.active){clearTimeout(menu.submenu[z].data("timeout"));}
else{menu.animatedown(menu.submenu[z])};
},
function(){ //mouseleave
$(this).data("timeout", setTimeout(function(){menu.animateup(menu.submenu[z])},200));
menu.active = false;
}
)
menu.submenu[z].hover(
function(){ //mouseover
menu.active = true;
if(menu.menuitem[z].data("timeout")){clearTimeout(menu.menuitem[z].data("timeout"));};
},
function(){ //mouseleave
$(this).data("timeout", setTimeout(function(){menu.animateup(menu.submenu[z]);menu.active = false;},200));
}
);
})(z); //this is to enable closures http://bonsaiden.github.com/JavaScript-Garden/#function.closures
}
什么是'animateup'和'animatedown'? – Neal 2012-02-06 21:22:42
我添加了animateup和animatedown代码。 – 2012-02-06 21:23:15
它看起来像是在多个函数中使用单个变量,但期望每个函数中的变量都不相同。阅读[this](http://bonsaiden.github.com/JavaScript-Garden/#function。关闭)(“闭环内闭合”)。 – pimvdb 2012-02-06 21:25:27