javascript - 在 img 中运行脚本时出现问题

标签 javascript html

我正在尝试使用 html、css 和 vanilla JS 制作 SPA(我对 JS 知之甚少)。我遇到的问题是,我正在使用的方法在我的标题中可以正常工作,其中我只有“a”,里面有文本。但是当我想使用 img 作为“a”时,脚本在 img 内部不起作用,它只允许我在 img 周围单击而不是在其内部单击。 我很感激任何帮助。 这是我的脚本和我遇到问题的部分的 html。

const route = (event) => {
  event = event || window.event;
  event.preventDefault();
  window.history.pushState({}, "", event.target.href);
  handleLocation();
};

const routes = {
  404: "./pages/404.html",
  "/": "./pages/index.html",
  "/vehicles": "./pages/vehicles.html",
  "/services": "./pages/services.html",
  "/contact": "./pages/contact.html",
  "/financing": "./pages/financing.html",
  "/locations": "./pages/locations.html",
};

const handleLocation = async () => {
  const path = window.location.pathname;
  const route = routes[path] || routes[404];
  const html = await fetch(route).then((data) => data.text());
  document.getElementById("main-page").innerHTML = html;
};

window.onpopstate = handleLocation;
window.route = route;

handleLocation();
<a href="/financing" onclick="route()" class="mainServices-section">                        
  <div class="main-title">
    <h2>Financing</h2>
  </div>
  <img src="../image/financing-image-colored.svg" alt="">
</a>

最佳答案

问题是当您单击<img>target未设置为您的<a>标记为event.target.hrefundefined .

而不是使用 onclick属性,使用委托(delegate)事件监听器并检查它是否源自 <a>标签或后代。

document.addEventListener("click", (e) => {
  const anchor = e.target.closest("a[href]");
  if (anchor) {
    e.preventDefault();
    window.history.pushState({}, "", anchor.href);
    handleLocation();
  }
});

演示 ~ https://jsfiddle.net/dgn1r5zh/

关于javascript - 在 img 中运行脚本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74649329/

相关文章:

javascript - 为什么这个 Javascript 无法找到正确的索引?

javascript - 可以在初始 DOM 解析期间/之前修改 DOM 吗?

javascript - 数组中的表,隐藏空行

javascript - 如何通过 javascript 在不公开 API key 的情况下将数据存储在 Amazon DB(没有服务器)中?

javascript - 将鼠标悬停在其他 div 上时更改中心 div 的鼠标悬停效果

javascript - 为什么我的轮播图像旁边有额外的空间?

javascript - 我怎样才能在 Canvas 上看到整个图片的原始分辨率,而不会降低质量?

html - 不 float 在同一条线上,如何修复 css

javascript - 函数未在 HTMLButtonElement.onclick Angular 4 中定义

javascript - HTML5 表单验证