Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 在IE中不使用覆盖的图像地图_Javascript_Jquery_Css_Internet Explorer 7_Imagemap - Fatal编程技术网

Javascript 在IE中不使用覆盖的图像地图

Javascript 在IE中不使用覆盖的图像地图,javascript,jquery,css,internet-explorer-7,imagemap,Javascript,Jquery,Css,Internet Explorer 7,Imagemap,我正试图创建一个交互式地图与覆盖使用html图像地图。 欲了解详情,请访问: 解释: 当您将鼠标悬停在地图的上方时,它会显示一个带有链接的覆盖图。 当你移动到覆盖区时,为了防止覆盖区关闭,因为你不再在该区域上悬停,我在它关闭覆盖区之前使用了setTimeout 问题: 除了IE,它在每个浏览器中都能正常工作。 在IE 7和IE 8中,当您将鼠标悬停在另一个上方的覆盖上时,它会立即切换到该的覆盖上 起初,我认为这是一个z-index问题,的z-index位于覆盖层之上,但我认为我的z-inde

我正试图创建一个交互式地图与覆盖使用html图像地图。 欲了解详情,请访问:


解释:

当您将鼠标悬停在地图的
上方时,它会显示一个带有链接的覆盖图。 当你移动到覆盖区时,为了防止覆盖区关闭,因为你不再在该区域上悬停,我在它关闭覆盖区之前使用了
setTimeout


问题:

除了IE,它在每个浏览器中都能正常工作。 在IE 7和IE 8中,当您将鼠标悬停在另一个
上方的覆盖上时,它会立即切换到该
的覆盖上

起初,我认为这是一个z-index问题,
的z-index位于覆盖层之上,但我认为我的z-index设置正确。我也在想,这可能只是IE处理图像地图的方式


代码:

下面是设置事件的代码

jQuery(function($){
    // binds mouseenter and mouseleave to <area>
    $('area').bind('mouseenter',function(){
        sectionNum = this.hash;
        sectionNum = sectionNum.replace(/#/,'');
        showOverlay(sectionNum);
        clearTimeout(timer);    
    }).bind('mouseleave', function(){
        timerClose();
    });

    $('.map_info').bind('mouseenter', function(){
        clearTimeout(timer);
    }).bind('mouseleave', function(){
        timerClose();
    });
});

// sets timer before closing to allow cancel
var timer;
function timerClose(){
    timer = setTimeout(function(){hideOverlay();},500);
}
jQuery(函数($){
//将mouseenter和mouseleave绑定到
$('area').bind('mouseenter',function(){
sectionNum=this.hash;
sectionNum=sectionNum.替换(/#/,'');
显示覆盖(sectionNum);
清除超时(计时器);
}).bind('mouseleave',function(){
timerClose();
});
$('.map_info').bind('mouseenter',function(){
清除超时(计时器);
}).bind('mouseleave',function(){
timerClose();
});
});
//在关闭前设置计时器以允许取消
无功定时器;
函数timerClose(){
timer=setTimeout(函数(){hideOverlay();},500);
}

问题在于,当悬停结束时,IE清除了设置超时。我没有运行您的代码,但我遇到了相同的问题,cpuld可以通过将
setTimeout
函数作为字符串传递来修复它

例如,
setTimeout(警报('hi'),1000)
未在悬停状态下运行的函数上工作,但
setTimeout(“警报('hi')”,1000)
正在工作。 在您的代码中,可能会替换

timer = setTimeout(function(){hideOverlay();},500);

解决问题。 IE运行的代码似乎是在全局范围内以字符串形式传递的

我还可以看到页面中有jQuery。有一个jQuery插件,名为do hover delay,非常好。也许插件编写器编写了更多的跨浏览器代码


让我知道它是否有效。:)

在IE 9中似乎工作得很好,不幸的是,我目前无法访问其他浏览器。虽然仍然是Microsoft,因此存在固有的缺陷,但IE9远远优于所有以前版本的IE。我对它的工作并不感到惊讶。最后,我做了类似的事情:跟踪覆盖位置和鼠标位置,以阻止其他
事件触发。这并不理想,而且需要更多的处理,因为跟踪鼠标移动是可行的。谢谢你的帮助,但这并没有解决问题。
timer = setTimeout("function(){hideOverlay();}",500);