所有,這是什麼導致'未捕獲的類型錯誤:無法調用未定義'錯誤的方法'動畫?
請參見下面的代碼:
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