Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery覆盖在IE6、Opera中不起作用_Javascript_Jquery_Cross Browser_Opera_Internet Explorer 6 - Fatal编程技术网

Javascript jQuery覆盖在IE6、Opera中不起作用

Javascript jQuery覆盖在IE6、Opera中不起作用,javascript,jquery,cross-browser,opera,internet-explorer-6,Javascript,Jquery,Cross Browser,Opera,Internet Explorer 6,为了弄明白这一点,我已经挠头好几个小时了。我有这个页面:。点击“任何菜肴”,应该会打开一种覆盖层 除了IE6和Opera之外,它几乎可以在所有浏览器中正常工作。在IE6和Opera中,jQuery“overlay”不会打开 有人知道为什么会这样吗 编辑:触发覆盖的代码如下: $("a#zoneListLink").click(function() { var listTop = $(this).css("top"); var listLeft = $(this).css("l

为了弄明白这一点,我已经挠头好几个小时了。我有这个页面:。点击“任何菜肴”,应该会打开一种覆盖层

除了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();

});

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()
}
我不知道为什么它会使用parseIntt,10/100*n.height,但看起来这段代码要求字符串中心对层进行垂直居中,或者使用数字。当Opera传入类似“310px”的字符串时,脚本将提取整数,将其除以100,即3.1,然后将其与浏览器窗口的高度相乘?!。最终的效果是覆盖层被小心地放置在屏幕外面-屏幕高度下降3

在Firefox中,我们看到这一行,t变量是字符串“auto”。脚本尝试使用parseInt返回“nota Number”,NaN,然后除以100,再乘以窗口高度——当然,这会一直返回NaN。然后,它将覆盖定位在NaNpx,浏览器会将其作为伪值忽略。您将在Firefox的错误控制台中找到一条警告


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

页面中有很多内容,但如果使用jQuery,则会将其隐藏起来。也许你应该试着把页面缩小到最小代码,这样就可以重现问题。这一点很好。我会试着回应霍根,而不是杰森。杰森,我很乐意!但10%的用户仍然使用IE6。另外,这个问题也发生在Opera上,而且Opera的市场份额只有0.02%左右。我不会担心的。IE6已被正式弃用,没有人使用Opera。继续。@Jason:开发人员很少决定应该使用什么浏览器supported@philippe任何称职的开发人员都应该能够给出一份清单,说明为什么不支持这两种浏览器,除非有非常具体的要求。最大的一个问题是,你将花费80%的时间处理那些不到5%的用户会看到的小怪癖。金钱万能,干得好!我必须承认,我的问题有点像大海捞针,没有背景,很难调试,你已经搞定了!昨晚我发现“listTop”和“listLeft”返回“auto”。我意识到如果我错了,请纠正我,这是因为覆盖控件在窗口上创建了一个位置为“static”的控件;var api=$azoneListLink.overlay{api:true,close:'div.close',top:listPosition.top+26,left:listPosition.left,onLoad:function{$document.clickfunction{api.close;};},onClose:function{$document.unbindclick;}.load;将位置设置为绝对位置,而不是静态->$ZonelList.csp位置,绝对位置;而且它有效!另一种解决方法是,如果标记保持原来的状态,则只需使覆盖保持静态,而不为top/left传递任何值。毕竟,覆盖在脚本无法重新定位的其他浏览器中得到了完美的定位:。所以,我想你可以通过null或其他什么来代替listPosition.top+26?或者只是硬编码字符串自动。把它看作一个性能优化——当然,如果标记可以移动,你最好保留当前版本。BTW,我意识到为什么脚本是这样写成的:它支持百分比。所以它需要一个数字,字符串中心或者字符串中的一个百分比,比如25%。它的错误在于只检查输入是否是字符串,而不是在进行百分比计算之前查找实际的“%”符号。