【问题标题】:Need to re-enable an onmouseout that was disabled in onclick event需要重新启用在 onclick 事件中禁用的 onmouseout
【发布时间】:2012-01-05 19:48:08
【问题描述】:

我在此处和 Internet 上搜索了可以重新启用已在 onClick 代码中禁用的 onMouseOut 的代码。我找到了一些东西,但没有什么适合我的情况。

页面上有一个容器 div,其中包含两个 div,一个用于图像,一个用于其对应的文本。图像下方是无序列表中的四个链接(1、2、3、4)。当访问者在#2 上滚动时,图像需要更改为 img2,匹配的文本 div 需要从“隐藏”变为“显示”。 onMouseOut 将图像和文本重置为原始版本。 onClick 将图像/文本更改为单击的任何 #,然后禁用 onMouseOut

现在我需要一种方法来让onMOuseOut 在下次访问者滚动该#link 时再次工作。正如我现在所拥有的,一旦onMouseOut 被禁用,它就会一直处于禁用状态,直到我重新加载页面。

这是目前为止的代码:

<head>
<script>
if (document.images) {
book1 = new Image
    book2 = new Image
    book3 = new Image
    book4 = new Image

book1.src = "/llb/assets/book1.jpg"
    book2.src = "/llb/assets/book2.jpg"
book3.src = "/llb/assets/book3.jpg"
    book4.src = "/llb/assets/book4.jpg"
}
function swapImage(thisImage,newImage) {
if (document.images) {
    document[thisImage].src = eval(newImage + ".src")
}
    

}
function show_visibility(IDS){
hide_visibility();
document.getElementById(IDS).style.display = 'block';
}

function hide_visibility(){
var sel = document.getElementById('bookleadin').getElementsByTagName('div');
for (var i=0; i<sel.length; i++) { sel[i].style.display = 'none'; }

}

</script>
</head>

<body>

<div id="content">
   <div id="books">
      <div id="bookimages">
        <img id="bookcover" name="bookcover" src="../llb/assets/book1.jpg" />
        <ul>
          <li><a href="#" onclick="swapImage('bookcover','book1'); show_visibility('bt1'); this.onmouseout=''" onMouseOver="swapImage('bookcover','book1')" onMouseOut="swapImage('bookcover','book1')">1</a></li>
          <li><a href="#" onclick="swapImage('bookcover','book2'); show_visibility('bt2'); this.onmouseout=''" onMouseOver="swapImage('bookcover','book2')" onMouseOut="swapImage('bookcover','book1')">2</a></li>
          <li><a href="#" onclick="show_visibility('bt3'); swapImage('bookcover','book3')" onMouseOver="swapImage('bookcover','book3')" onMouseOut="swapImage('bookcover','book1')" onclick="swapImage('bookcover','book3')">3</a></li>
          <li><a href="#" onclick="show_visibility('bt4'); swapImage('bookcover','book4')" onMouseOver="swapImage('bookcover','book4')" onMouseOut="swapImage('bookcover','book1')" onclick="swapImage('bookcover','book4')">4</a></li>
        </ul>
      </div><!-- end bookimages -->
      <div id="bookleadin">
        <div id="bt1" style="display:block;"><p>Writing starts with living...</p>
      </div>
        <div id="bt2" style="display:none;"><p>The air is silk...</p>
      </div>
        <div id="bt3" style="display:none;"><p>I lived in the woods...</p>
      </div>
        <div id="bt4" style="display:none;"><p>I tried to forget...</p>
      </div>
    </div><!-- end bookleadin -->
    <div class="spacer"></div>
   </div><!-- ends books -->
</div><!-- end content -->

list item #2 是我正在测试的示例。我仍然是 Javascript 初学者/中级人员,因此任何答案都必须足够简单,让我能够理解并应用于该项目或完成,以便我可以复制/粘贴它。

【问题讨论】:

    标签: javascript dom-events onmouseout


    【解决方案1】:

    您可以在onclick 设置一个标志,以验证它是否已被点击,如果是,则交换onmouseout,否则什么都不做,但不做this.onmouseout = ""

    编辑:

      <head>
    <script>
        if(document.images) {
            book1 = new Image
            book2 = new Image
            book3 = new Image
            book4 = new Image
    
            book1.src = "/llb/assets/book1.jpg"
            book2.src = "/llb/assets/book2.jpg"
            book3.src = "/llb/assets/book3.jpg"
            book4.src = "/llb/assets/book4.jpg"
        }
        var swap_list = {}; // a list of swapped elements
        function swapImage(thisImage, newImage) {
            if(typeof swap_list[thisImage] == 'undefined' || swap_list[thisImage]=='')
                if(document.images) {
                    document[thisImage].src = eval(newImage + ".src");
                    swap_list[thisImage] = newImage;
                }
            else
                {
                    swap_list[thisImage] = '';
                    document[thisImage].src = "../llb/assets/book1.jpg";
                }
        }
    
        function show_visibility(IDS) {
            hide_visibility();
            document.getElementById(IDS).style.display = 'block';
        }
    
        function hide_visibility() {
            var sel = document.getElementById('bookleadin').getElementsByTagName('div');
            for(var i = 0; i < sel.length; i++) {
                sel[i].style.display = 'none';
            }
    
        }
    </script>
    </head>
    <body>
        <div id="content">
            <div id="books">
                <div id="bookimages">
                    <img id="bookcover" name="bookcover" src="../llb/assets/book1.jpg" />
                    <ul>
                    <li>
                            <a href="#" onclick="swapImage('bookcover','book1'); show_visibility('bt1'); " onMouseOver="swapImage('bookcover','book1')" onMouseOut="swapImage('bookcover','book1')">1</a>
                    </li>
                    <li>
                        <a href="#" onclick="swapImage('bookcover','book2'); show_visibility('bt2'); " onMouseOver="swapImage('bookcover','book2')" onMouseOut="swapImage('bookcover','book1')">2</a>
                    </li>
                    <li>
                        <a href="#" onclick="show_visibility('bt3'); swapImage('bookcover','book3')" onMouseOver="swapImage('bookcover','book3')" onMouseOut="swapImage('bookcover','book1')" onclick="swapImage('bookcover','book3')">3</a>
                    </li>
                    <li>
                        <a href="#" onclick="show_visibility('bt4'); swapImage('bookcover','book4')" onMouseOver="swapImage('bookcover','book4')" onMouseOut="swapImage('bookcover','book1')" onclick="swapImage('bookcover','book4')">4</a>
                    </li>
                </ul>
            </div><!-- end bookimages -->
            <div id="bookleadin">
                <div id="bt1" style="display:block;">
                    <p>
                        Writing starts with living...
                    </p>
                </div>
                <div id="bt2" style="display:none;">
                    <p>
                        The air is silk...
                    </p>
                </div>
                <div id="bt3" style="display:none;">
                    <p>
                        I lived in the woods...
                    </p>
                    </div>
                    <div id="bt4" style="display:none;">
                        <p>
                        I tried to forget...
                        </p>
                </div>
                </div><!-- end bookleadin -->
                <div class="spacer"></div>
            </div><!-- ends books -->
        </div><!-- end content -->
    </body>
    

    【讨论】:

    • 让我改写一下,看看我是否理解你的意思。我会编写一个函数来确定是否发生了 onClick。如果为真,我将禁用 onMouseOut,如果为假,它不会触及 onMouseout,因此当光标移出链接并且原始内容会重新出现时,它仍然会发生。我将从哪里调用验证功能?我将使用什么代码来禁用 onMouseOut 事件,一旦用户将鼠标悬停在或单击不同的链接,我将如何为该链接重新打开它?
    • @ssliver1 您没有禁用 onmouseout,如果 onclick 发生了,您只需验证它,如果它确实发生了,那么您的代码什么也不做。是需要一些代码还是算法的纯逻辑就够了?
    • 也许我确实需要一些代码。我一直试图弄清楚何时/何地会触发检查以验证 onclick。每个链接都有三个事件,mouseOver、mouseOut 和 onCLick。如果他们单击链接,我需要 mouseOut 什么都不做。如果他们不点击,我需要 mouseOut 来完成一个动作。感谢您的帮助。
    • @ssliver1 我已经重新编辑了帖子,抱歉耽搁了。希望这就是您正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2015-12-28
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多