0

我正在尝试使用 Javascript 来完成以下任务:

  1. 页面加载时显示图像。该图像是没有识别标题的身体部位图片,因此在下面的示例代码中称为“Wk1_2_Medial_Border_uncaptioned.jpg”
  2. 当您将鼠标悬停在它上面时,会出现第二张相同且带有标题的图片。在下面的代码中,它被称为“Wk1_2_Medial_Border_captioned.jpg”。
  3. 当您单击图像之外的网页上的任何位置时,它会恢复为无标题的图片。
  4. 当您在图像内部单击时,它会加载带标题的图片。

在计算机上,您显然无法在不将鼠标移出的情况下单击图像外部,因此步骤 3 和 4 可能看起来是多余的。第 3 步和第 4 步的目的是让页面在 Iphone 和 Ipad 上正常工作。当我在 body 标签或 image 标签中没有 onmousedown 事件时,它在计算机和 Android 平板电脑上运行良好。

平板电脑似乎将页面上的点击注册为 mousedown 和 mouseover 事件。看起来我的代码正在做的是这样的:

  1. Uncaptioned图像加载。

  2. 用户点击图像。

  3. 正在触发图像的onmousedown事件,显示带标题的图像。

  4. 身体的onmousedown事件几乎是立即触发的,显示出没有字幕的图像。

我难住了。我不希望正文中的 onmousedown 事件触发,或者我想要某种方式让图像的 onmousedown 事件撤消它。但我不知道怎么做。

这是我的代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <link style="text/css" rel="stylesheet" href="../ptwebsite.css" >
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <script>
            function toggleCaption(picture)
            {
                var pic = document.getElementById("bodyPartPic");
                pic.src = picture;                      
            }
        </script>
        <title>Name The Body Part</title>
    </head>
    <body onmousedown="toggleCaption('images/Wk 1_1_Spine_of_Scapula_uncaptioned.jpg')">
    <div class="maincontent">
        <ul id="navbar">
            <li><a href="../main.html">Return to Main</a></li>
            <li><a href="bodypart1002.php">Next</a></li>
        </ul>
        <h1 id="welcomebanner">Can You Name The Body Part?</h1>
        <h3>Roll your mouse over the image to see the name</h3>
        <img id="bodyPartPic" class="portraitImage" 
        src="images/Wk 1_1_Spine_of_Scapula_uncaptioned.jpg"
        onmouseover="toggleCaption('images/Wk 1_1_Spine_of_Scapula_captioned.jpg')"
        onmouseout="toggleCaption('images/Wk 1_1_Spine_of_Scapula_uncaptioned.jpg')"
        onmousedown="toggleCaption('images/Wk 1_1_Spine_of_Scapula_captioned.jpg')" 
                />
        </div>
    </body>
</html>
4

3 回答 3

0

onmousedown被解雇一次img和一次body

如果要防止在父母身上进一步触发事件,则需要从方法中返回 false。

onmousedown="toggleCaption('images/Wk 1_1_Spine_of_Scapula_captioned.jpg') return false;"

应该管用。

当然,您也可以mousedown从正文中删除处理程序。

于 2013-10-31T23:05:18.833 回答
0

这个问题是由所谓的事件传播引起的。可以在这里找到对所发生情况的一个很好的解释:http ://www.quirksmode.org/js/events_order.html

文章还谈到了取消这种效果。

于 2013-10-31T23:06:15.427 回答
0

添加return false;到末尾toggleCaption以取消事件传播

于 2013-10-31T23:10:31.530 回答