我运行一段代码使用jQuery和2 jQuery插件时获得IE7这个问题。代码工作在FF3和铬。

完整的错误是:

Line: 33 
Char: 6 
Error: bg is null or not an object 
Code: 0 
URL: http://localhost/index2.html

然而线33是一个空行。

我使用2个插件:可拖动和变焦。无论我做什么的代码总是线33有过错。我检查源代码中有通过查看源代码更新,但我觉得这可能是在骗我。

<body>
<div id="zoom" class="zoom"></div>
<div id="draggable" class="main_internal"><img src="tiles/mapSpain-smaller.jpg" alt=""></div>

<script type="text/javascript">
$(document).ready(function() {
    $('#draggable').drag();
    $('#zoom').zoom({target_div:"draggable", zoom_images:new Array('tiles/mapSpain-smaller.jpg', 'tiles/mapSpain.jpg') });
});
</script>

</body>

从本质上讲什么,我试图做的是重新使用jQuery语用Ajax的地图演示。


这样看来,这个片段的第二行是造成麻烦:

bg = $(this).css('background-position');                    
if(bg.indexOf('%')>1){

这似乎是试图选择#draggable的背景位置属性,并没有找到它?手动添加background-position: 0 0;没有解决它。如何解决这个问题的任何想法?

我尝试使用MS脚本调试器,但也就是几乎没用。不能检查变量或其他任何东西。

有帮助吗?

解决方案

一个位更挖掘有关在Interweb已经揭示了答案:IE不明白选择background-position。它理解非标准background-position-xbackground-position-y

目前黑客东西一起要解决它。

尼斯一个,雷德蒙。

其他提示

要避开的事实,Internet Explorer不支持“背景,地位” CSS属性,在jQuery的1.4.3+可以使用的。cssHooks 对象正常化浏览器之间该属性。

要保存自己一些时间,有一个背景位置jQuery插件可用的,允许两个“背景位置”和“背景位置-X / Y”为预期在不支持的一个或另一个通过默认浏览器工作。

有有趣。 IE8不理解吸气backgroundPosition,但它理解设定器。

$('.promo3').mousewheel(function(e,d){
  var promo3 = $(this);
  var p = promo3.css('backgroundPosition');
  if (p === undefined) {
    p = promo3.css('backgroundPositionX') + ' ' + promo3.css('backgroundPositionY');
  }
  var a = p.split(' ');
  var y = parseInt(a[1]);
  if (d > 0) {
    if (y < -1107) y += 1107; 
    y -= 40;
  }
  else {
    if (y > 1107) y -= 1107;
    y += 40;
  }
  promo3.css('backgroundPosition', a[0] + ' ' + y + 'px');
  return false;
});

有在IE8和IE8兼容视图巨大的。

这为我工作:

    if (navigator.appName=='Microsoft Internet Explorer')
   {
    bg = $(drag_div).css('backgroundPositionX') + " " + $(drag_div).css('backgroundPositionY');
   }
   else
   {
    bg = $(drag_div).css('background-position');
   }

希望它为你。

您可能要检查,以确保您加载正确的顺序您的js文件,以使任何依赖关系考虑在内。

思维位(和一杯茶)后来我想出了:

if(bg == 'undefined' || bg == null){
    bg = $(this).css('background-position-x') + " " + $(this).css('background-position-y');
}

不幸的是,返回中心为中心,尽管网上资源,我能找到状态时,它应该返回0,如果值是不确定的。

开始怀疑有一个实际的修复/解决方法此。很多人都尝试过所有迄今未能捕捉所有边缘的情况下。

backgroundPosition的驼峰版本似乎可行,但我不知道足够的jQuery做的如何去了解它的准确评估 - 从我读过你只能使用驼峰吸气剂如果属性已设置。请告诉我,如果我错了。

  

然而线33是一个空行。

这将是你的.js文件行一个33,不就行了HTML本身33。 IE无法报告其实际的文件中的错误是看各的.js的一些关于“BG”的33行。如果出现最坏最坏就可以开始在每个的.js的开始插入新行和看到的行号是否改变。

  

我检查源必须通过查看源代码更新,但我觉得这可能是在骗我。

查看源总是告诉你什么是IE浏览器从服务器得到。它不会显示任何更新的DOM。

尝试backgroundPosition istead

此外,确保“这个”是否存在,以及您的属性请求返回的值。当你试图调用上不存在的属性的方法IE会抛出这样的错误,因此BG为空或空的对象。如果你不约IE护理,你可以做BG = $(本)... || “”,使得会员总是一些引用。

此外,无关你得到的错误,但为1的索引值是否正确?你的意思是-1?

Yupp,点击试试背景位置,而不是,或只是将背景设置位置与jQuery你怎么称呼它之前。生病猜人们常常知道通过CSS调用前的位置。它不是很漂亮,但不知何故,没有的伎俩我。)

例如:

//set it in with javascript.
$("someid").css("background-position", "10px 0");
...
//do some funky stuff
//call it
$("someid").css("background-position");
//and it would return "10px 0" even in IE7

如果没有什么帮助,它也可能使下面的技巧。

我们可以通过内绝对定位的元素(具有相同的背景)替换的元件的背景。坐标将由lefttop属性所取代。这将在所有的浏览器。

为了更好地理解,请,检查代码:

<强>之前

<div></div>

div {
  background: url(mySprite.png);
  background-position: -100px 0;
}

<强>后

<div>
  <span></span>
</div>

div {
  position: relative;
  overflow: hidden;
  width: 100px;       /* required width to show a part of your sprite */
  height: 100px;      /* required height ... */
}

div span {
  position: absolute;
  left: -100px;       /* bg left position */
  top: 0;             /* bg top position */
  display: block;
  width: 500px;       /* full sprite width */
  height: 500px;      /* full sprite height */
  background: url(mySprite.png);
}

此解决方案不是很灵活,但它让我显示的图标悬停状态正常。

您不能在jQuery的CSS功能使用破折号。你要做的是在驼峰: .css('backgroundPosition').css('backgroundPositionX').css('backgroundPositionY')对于 IE

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top