jQuery覆盖不适用于IE6,Opera

时间:2010-06-03 20:43:13

标签: javascript jquery cross-browser opera internet-explorer-6

我一直在摸不着头脑试图解决这个问题。我有这个页面:http://173.203.72.190/default.aspx。单击“任意菜肴”时,应该打开一种叠加层。

除了IE6和Opera之外,它几乎适用于所有浏览器。在IE6和Opera中,jQuery'overlay'将无法打开。

任何人都有任何想法,为什么会这样?

编辑:触发叠加层的代码如下:

$("a#zoneListLink").click(function() { 

    var listTop = $(this).css("top");
    var listLeft = $(this).css("left");

    var api = $("a#zoneListLink").overlay({api: true, close:'div.close', top: listTop, left:listLeft, onLoad:function() { $(document).click(function() { api.close(); } ); },
    onClose:function() { $(document).unbind("click"); } }).load();

});

1 个答案:

答案 0 :(得分:1)

jQuery叠加效果中存在错误或不兼容。很难找到,因为Opera的行为更有意义,但打破了剧本的错误期望......

首先,比较Opera中此命令的输出,例如Firefox:

javascript:alert(getComputedStyle(document.getElementById("cuisineListLink"),'').top);

Opera为您提供cuisineListLink的顶部位置(以像素为单位)。 Firefox说“自动”。

现在,在combined.js中寻找这段代码(由我包裹):

if(typeof t=="string"){
    t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()
}

我不知道它为什么会出现“parseInt(t,10)/100*n.height()”,但看起来这段代码需要字符串“center”(要对图层进行垂直居中)或一个号码。当Opera传入类似'310px'的字符串时,脚本将提取整数,将其除以100(即3.1)并将其乘以浏览器窗口的高度(?!)。净效应是将覆盖层小心地放置在屏幕外 - 3个屏幕高度下降。

在Firefox中,我们到达这一行,t变量是字符串'auto'。该脚本尝试parseInt()返回'Not a Number',NaN,并继续除以100并乘以窗口高度 - 这当然会保持返回NaN。然后它将叠加层定位在NaNpx上,浏览器将其简单地忽略为虚假值。您将在Firefox的错误控制台中找到该效果的警告。

我建议使用不同的叠加插件(或者更新的迭代?),因为这段代码没有多大意义。