0

以下代码在 Firefox 上完美运行,但在 Chrome 上崩溃,出现以下错误:未捕获的类型错误:对象 [object Object] 的属性“pos”不是函数

这是代码,带有注释:

var CantidadMenu = $('div[class^=container_menu_]').length;
var position = $("#menu_unidades").position();
var IzAdd = 0;
var w = $("#menu_unidades").width();
var h = $("#menu_unidades").height();
for (i=0;i<CantidadMenu;i++){
    var pos = 'pos'+(i+1); //I create a variable that will hold a string like: pos1,pos2...
    IzAdd = IzAdd+25;
    function pos(div){ //on this line I use the variable I created, which crashes on Chrome
        var estilo1 = $(div).css({'left':IzAdd+25,'top':position.top+(IzAdd-25)});
        return estilo1;
    }
    pos('.container_menu_'+(i+1));
    $('.container_menu_'+(i+1)).css({'z-index':297+i,'width':w,'height':h});
}
4

2 回答 2

2

在这里定义一个名为 pos 的函数:

function pos(div){ //on this line I use the variable I created, which crashes on Chrome
    var estilo1 = $(div).css({'left':IzAdd+25,'top':position.top+(IzAdd-25)});
    return estilo1;
}

console.log(pos) // function ....

在这里你用一个字符串覆盖它:

var pos = 'pos'+(i+1);

console.log(pos) // string....

您应该将函数或字符串命名为其他名称。

PS:我知道在你的代码中顺序是相反的,但是函数声明被提升到范围的顶部,所以 JS 解释器按照我写它们的顺序“看到”它们:第一个函数,然后是字符串。

PSS:崩溃实际上是在这一行:

pos('.container_menu_'+(i+1));
于 2013-11-12T12:50:55.747 回答
1

function pos(div)var pos = function(div)...(除了前者是在解析时定义的,而后者是在运行时定义的,但这与您的代码无关),因此如果您期望通过定义 that pos = 'pos1';,例如,您将function pos(div)成为function pos1(div)它不会

它只会覆盖pos变量,它不再是一个字符串,而是一个函数。

要修复代码,请在代码顶部、for 循环之外编写一个函数,向其添加另一个参数 ( IzAdd) 并确保正确修复函数调用。

该函数应如下所示:

function pos(div, IzAdd){
    return $(div).css({'left':IzAdd+25,'top':position.top+(IzAdd-25)});
}
于 2013-11-12T12:54:42.603 回答