You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

event.preventDefault()对链接无效,地图点击播放音频时链接仍跳转

嘿,我一眼就揪出问题根源啦!你的event.preventDefault()没生效,核心原因是JavaScript代码根本没有被正确加载执行!

先看你HTML里的这行代码:

<link src="javascript.js" />

link标签是用来加载CSS样式表的,加载JavaScript必须用<script>标签啊!这就导致你的事件监听器完全没绑定到那些点位链接上,点击的时候自然会触发默认的跳转行为,preventDefault()根本没机会运行~

下面给你一步步解决所有问题:

1. 修复JS的引入方式

把错误的link标签改成正确的<script>标签,而且最好把它放在</body>闭合标签之前,这样能确保页面DOM元素都加载完成后再执行JS,避免找不到.mapOverlay a元素的问题:

<!DOCTYPE html>
<html>
<head>
 <title>World Map</title>
 <link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
 <div id="WorldMap">
 <div class="mapOverlay">
 <a class="point1" href="https://upload.wikimedia.org/wikipedia/en/6/61/I_Have_A_Dream_sample.ogg"></a>
 <a class="point2" href="https://upload.wikimedia.org/wikipedia/en/3/3d/7_sample.ogg"></a>
 <a class="point3" href="sounds/test.ogg"></a>
 </div>
 </div>
 <!-- 把JS放在这里,确保DOM已加载 -->
 <script src="javascript.js"></script>
</body>
</html>

2. 修复CSS的小bug

你的CSS里.point3的left和top属性没加单位(比如px),这会导致这个黄色点位无法正确显示在地图上,赶紧补上:

.mapOverlay a.point3 {
 left: 300px;
 top: 400px;
 background-color: yellow;
}

3. 可选:优化JS代码(更现代更健壮)

你的JS逻辑本身没问题,但可以改成更现代的写法,还能解决一个潜在的小问题:当href是相对路径时,audioPlayer.src会变成绝对URL,直接全等比较可能失效。这里用includes来判断,同时把var换成const,用forEach循环更清晰:

// 获取所有地图点位链接
const markers = document.querySelectorAll('.mapOverlay a');
// 创建音频播放器实例
const audioPlayer = new Audio();

// 给每个点位绑定点击事件
markers.forEach(marker => {
 marker.addEventListener('click', function(event) {
 // 阻止链接跳转默认行为
 event.preventDefault();
 // 获取音频地址
 const audioSrc = this.getAttribute("href");
 // 如果当前正在播放这个音频,就暂停并重置播放位置
 if (!audioPlayer.paused && audioPlayer.src.includes(audioSrc)) {
 audioPlayer.pause();
 audioPlayer.currentTime = 0; // 可选:点击同一点位时重置到开头
 return;
 }
 // 设置新的音频源并播放
 audioPlayer.src = audioSrc;
 audioPlayer.play();
 });
});

为什么代码片段里能正常运行?

因为在代码片段的环境中,JS是被直接注入到页面执行的,不需要通过<script>标签引入,所以你的事件监听器能正常绑定,preventDefault()也就生效了。但在本地环境中,JS没加载,所以才会出现跳转的问题~

内容的提问来源于stack exchange,提问作者giorgi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:25:18