【问题标题】:Why this Javascript does not work in IE为什么这个 Javascript 在 IE 中不起作用
【发布时间】:2013-07-03 10:46:04
【问题描述】:

我有一段 Javascript 代码可以在 Chrome 和 Firefox 中运行,但在 IE 中无法运行。该代码应该在鼠标悬停某个 div 时更改 CSS 背景图像,并在鼠标离开时删除背景图像。

Javascript:

$(document).ready(function() {
    $('.expositores1').hover(function() {
        $('.expositores1').css('background-image', 'url(/wp-content/themes/kallyas/images/mapa/piso0/inter_piso0_r5_c2_f4.jpg)', 'background-repeat', 'no-repeat');
        $('.expositores2').css('background-image', 'url(/wp-content/themes/kallyas/images/mapa/piso0/inter_piso0_r12_c2_f2.jpg)', 'background-repeat', 'no-repeat');
        $('.expositores3').css('background-image', 'url(/wp-content/themes/kallyas/images/mapa/piso0/inter_piso0_r12_c4_f2.jpg)', 'background-repeat', 'no-repeat');
        $('.expositores4').css('background-image', 'url(/wp-content/themes/kallyas/images/mapa/piso0/inter_piso0_r14_c3_f2.jpg)', 'background-repeat', 'no-repeat');
    });
    $('.expositores1').mouseout(function() {
        $('.expositores1').css('background-image', 'none');
        $('.expositores2').css('background-image', 'none');
        $('.expositores3').css('background-image', 'none');
        $('.expositores4').css('background-image', 'none');
    });
});

HTML:

<div class="expositores1"></div>
<div class="expositores2"></div>
<div class="expositores3"></div>
<div class="expositores4"></div>

CSS:

.expositores1{
    position: absolute;
    width: 306px;
    height: 122px;
    margin-left: 11px;
    margin-top: 146px;
}
.expositores2{
    position: absolute;
    width: 81px;
    height: 127px;
    margin-left: 11px;
    margin-top: 268px;
}
.expositores3{
    position: absolute;
    width: 185px;
    height: 127px;
    margin-left: 132px;
    margin-top: 268px;
}
.expositores4{
    position: absolute;
    width: 40px;
    height: 90px;
    margin-left: 92px;
    margin-top: 304px;
}

有人可以帮忙吗?为什么它在 Chrome 和 Firefox 中有效,而在 IE 中无效?

问候, 雨果

【问题讨论】:

  • 当你说不工作时,哪个部分不工作?有没有看到图片,是鼠标悬停还是鼠标移出的问题?
  • 到目前为止,您尝试过哪些版本的 IE?
  • 我使用的是 IE10。不起作用的是悬停。所以,我是悬停 div 并且背景图像没有改变。
  • 你为什么使用.hover().mouseout()? (它们不是对立的——如果你将一个函数传递给.hover(),它将在鼠标进入和离开时被调用。)
  • 除了你的问题,你应该检查编码风格。您不应该对所有这些 $('.expositoresX') 进行硬编码。创建一个从第二个元素开始的循环或其他东西。

标签: javascript html internet-explorer


【解决方案1】:

您错误地使用了 jQuery css() 函数。

如果您只想设置一个属性,请使用:.css('prop', 'value')

如果您需要一次设置多个属性,则必须传递一个object。在你的情况下:

.css({
     'background-image':'url(/wp-content/themes/kallyas/images/mapa/piso0/inter_piso0_r5_c2_f4.jpg)',
     'background-repeat':'no-repeat'
    });

另外,作为@Miro Markarian pointed out,你真的应该依靠 CSS :hover 指令来实现这一点,而不是 JavaScript。

【讨论】:

  • 确实如此,但是为什么 OP 发现它在某些浏览器中“有效”? (我希望 jQuery 会忽略额外的参数并使用前两个参数,尽管我没有检查代码。)
  • 我刚刚检查过,确实 jQuery 只是忽略了额外的参数。
  • @nnnnnn 好吧...我认为可能有很多因素导致某些浏览器在一个浏览器中工作而在另一个浏览器中不工作。例如I'm struggling with a very similar problem,其中图片在 FF / Chrome 中不显示,但在 IE 中显示。
  • 这可能与图像 URL 的格式有关,因为 OP 的代码在 IE10 中为我工作:jsfiddle.net/deTzA - 但我没有他们的图像,所以我不得不替换具有不同路径的占位符图像...
  • 是的,但是 :hover 只改变“这个”背景图像,而不是一组 div 的背景图像。对吗?
【解决方案2】:

使用 css hover 选择器可以更轻松地完成此操作。CSS 已经实现了..

你有点在重新发明轮子。

只需将您在 hover 时想要发生的任何事情添加到该 css 元素的 hover 选择器:

.expositores1{
    position: absolute;
    width: 306px;
    height: 122px;
    margin-left: 11px;
    margin-top: 146px;
    background-color: #F00;
}
.expositores1:hover {
    background-color: #00F;
}

更好的是,您的浏览器会在您将鼠标移出后切换回正常的选择器。 无需让 javascript 为您完成。

这是我为你创建的JsFiddle

【讨论】:

  • 但是如何改变其他三个 div 的背景(都基于悬停在第一个上)?
  • 实际上我不能做 .expositores:hover 因为我想改变几个背景图像,而使用 .expositores:hover 它只会改变“这个” div。
  • Hugo - 您可以在第一个悬停时更改所有背景:jsbin.com/isequv/1/edit(假设有问题的 div 是问题中所示的兄弟姐妹)。
  • 我已经试过了,在 IE 下不行,但是在 Chrome 和 Firefox 下可以。
  • 您可以在2013.greenfestival.pt/index.php/greenfest-13/tematicas 上查看此内容,在 Chrome 和 IE 中尝试。只是悬停在 Av 的道路上。葡萄牙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多