为什么这个简单的JQuery Hover效果在IE7到IE9之外的任何地方都能正常工作?

时间:2011-05-03 14:37:00

标签: jquery internet-explorer-7 jquery-hover

刚接触jQuery(但不是vanilla JS)我完全不知道为什么以下悬停效果在FF,Chrome,Safari中有效,但在IE中却不行!我从Carl Meyer的帖子here中得到了这个剧本;仅更改对象ID以匹配我的标记。

您可以找到此页here的有效示例,但这里是代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
<title>test</title>  
    <script type="text/javascript" language="JavaScript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
    <script type="text/javascript" language="JavaScript">
        $(document).ready(function() {
            toolButtons = $('#toolButtons > li');
            insideCenter = $('#insideCenter > div');
            toolButtons.each(function(idx) {
                    $(this).data('slide', insideCenter.eq(idx));
                }).hover(
                function() {
                    toolButtons.removeClass('active');
                    insideCenter.removeClass('active');             
                    $(this).addClass('active');  
                    $(this).data('slide').addClass('active');
                });
            });
    </script>
    <style type="text/css">  
        #toolButtons .active {   font-weight: bold; }  
        #insideCenter div {   display: none; }  
        #insideCenter div.active {   display: block; }  
    </style> 
 </head>

 <body>
    <ul id="toolButtons">   
        <li class="active">First slide</li>   
        <li>Second slide</li>   
        <li>Third slide</li>   
        <li>Fourth slide</li> 
    </ul> 
    <div id="insideCenter">   
        <div id="slide1" class="active">Well well.</div>   
        <div id="slide2">Oh no!</div>   
        <div id="slide3">You again?</div>   
        <div id="slide4">I'm gone!</div> 
    </div>
 </body>
</html>

非常感谢任何帮助!

维尼

3 个答案:

答案 0 :(得分:2)

致电var toolButtons = $('#toolButtons > li');var insideCenter = $('#insideCenter > div');

您删除了var,但无法看到它正在尝试设置全局变量。尽可能使用var,尤其是在变量不是全局的情况下。

编辑:纯jQuery:

$(document).ready(function() {             
   $('#toolButtons > li').each(function(idx) {                     
        $(this).data('slide', $('#insideCenter > div').eq(idx));                 
    }).hover(                 
        function() {                     
            $('#toolButtons > li').removeClass('active');
            $('#insideCenter > div').removeClass('active');                                  
            $(this).addClass('active');                       
            $(this).data('slide').addClass('active');                 
        });             
}); 

答案 1 :(得分:0)

我认为你的互联网探索如何处理javascript存在问题,看来它不喜欢你的变种,我确信聪明的人能够解释互联网资源管理器和其他浏览器之间的差异。这个背景。

一种解决方案是全局定义它们:

    <script type="text/javascript" language="JavaScript">
  var toolButtons;
  var insideCenter;
    $(document).ready(function() {
        toolButtons = $('#toolButtons > li');
        insideCenter = $('#insideCenter > div');
        toolButtons.each(function(idx) {
                $(this).data('slide', insideCenter.eq(idx));
            }).hover(
            function() {
                toolButtons.removeClass('active');
                insideCenter.removeClass('active');             
                $(this).addClass('active');  
                $(this).data('slide').addClass('active');
            });
        });
</script>

答案 2 :(得分:0)

显而易见的原因是IE是垃圾。 但是,这实际上并没有帮助你...... 可以有一种方法在IE中使这项工作(尝试其他答案), 但我认为更简单的方法是改变你改变css的方式。 您正在使用一个函数来检测列表项是否正在悬停, 一个更简单的方法是创建一个函数,然后当鼠标悬停在<li>上时运行

function onHover(){
change the css values for different IDs
}

然后为每个列表项做

<li onmouseover="onHover();">blah</li>

您可能需要多个功能(每个功能一个), 但这取决于你如何编写你的功能。