首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型观察器不能在IE8中触发

原型观察器不能在IE8中触发
EN

Stack Overflow用户
提问于 2011-03-01 11:10:38
回答 4查看 1.4K关注 0票数 1

我想不出是什么原因导致IE8忽略这些观察者。它适用于FF、Chrome (10)和Safari。它永远不会命中IE8开发人员工具中设置的断点。

代码语言:javascript
复制
<script type="text/javascript">
//<![CDATA[
    var timeoutHolder = null;
    function displayZoom(id){
        window.clearTimeout(timeoutHolder);  //if we are coming from another hover target, prevent the opacity reset
        if($('mini-main').getOpacity()!=0.4)
            new Effect.Opacity('mini-main',{from:1.0,to:0.4,duration:0.5});
        new Effect.Appear(id,{duration:0.3});
    }
    function resetZoom(id){
        timeoutHolder = window.setTimeout(function(){
            new Effect.Opacity('mini-main',{from:0.4,to:1.0,duration:0.5});
        }, 100);    //gives us 100 ms for user to move onto another target before we reset the opacity
        new Effect.Fade(id,{duration:0.5});
    }
    $$('.mini-target').each(function(target_div){
        target_div.observe('mouseover',function(){
            displayZoom(target_div.id+'-hover');
        });
        target_div.observe('mouseout',function(){
            resetZoom(target_div.id+'-hover');
        });
    });
//]]>
</script>

关联的phtml为:

代码语言:javascript
复制
        <img src="<?php echo Mage::getBaseUrl('media').'Main.jpg'?>" id="mini-main"/>
            <div id="mini-target-1" class="mini-target"></div>
            <div id="mini-target-2" class="mini-target"></div>
            <div id="mini-target-3" class="mini-target"></div>
            <div id="mini-target-4" class="mini-target"></div>

            <div id="mini-target-1-hover" class="mini-hover" style="display:none">
                <img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-1.png'?>"/>
            </div>
            <div id="mini-target-2-hover" class="mini-hover" style="display:none">
                <img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-2.png'?>"/>
            </div>
            <div id="mini-target-3-hover" class="mini-hover" style="display:none">
                <img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-3.png'?>"/>
            </div>
            <div id="mini-target-4-hover" class="mini-hover" style="display:none">
                <img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-4.png'?>"/>
            </div>

我也尝试了单独附加观察器(没有each),但这没有任何区别:

代码语言:javascript
复制
    $('mini-target-2').observe('mouseover',function(){
            displayZoom('mini-target-2-hover');
    });
    $('mini-target-2').observe('mouseout',function(){
            resetZoom('mini-target-2-hover');
    });

谢谢,

JD

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-01 14:29:42

最黑的黑客。如果您在mini-target div上设置了背景,它就会起作用。我最终使用IE的一个条件setStyle来显示一个间隔gif。1998浏览器黑客FTW!

代码语言:javascript
复制
if(Prototype.Browser.IE){
     target_div.setStyle({background: 'url("<?php echo Mage::getBaseUrl('media').'spacer.gif'?>")'});
}

如果有人能解释为什么IE需要背景才能解雇观察者,我很乐意接受他们的答案……可能和hasLayout有关吧?

票数 2
EN

Stack Overflow用户

发布于 2011-03-01 15:46:26

我以前遇到过一组ID名称导致IE中的Javascript问题的情况。

该方案由紧跟在连字符-后面的数字组成。

尝试删除数字前的连字符。将mini-target-1更改为mini-target1

票数 2
EN

Stack Overflow用户

发布于 2011-03-01 13:42:43

如果你改变了你做事情的方式,它就像这样:

代码语言:javascript
复制
$(document).ready(function () {
    $('.mini-target').mouseover(function () {
        displayZoom($(this).attr("id") + '-hover');
    }).mouseout(function () {
        resetZoom($(this).attr("id") + '-hover');
    });
});

当你将鼠标移到它上面时,你仍然会引用每个“迷你目标”,我们会将鼠标链接到它的末尾。

它将在IE8中运行。

干杯,艾尔

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5150097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档