-
09-09-2019 - |
题
我运行一段代码使用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-x
和background-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
如果没有什么帮助,它也可能使下面的技巧。
我们可以通过内绝对定位的元素(具有相同的背景)替换的元件的背景。坐标将由left
和top
属性所取代。这将在所有的浏览器。
为了更好地理解,请,检查代码:
<强>之前强>
<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 强>