jQuery click事件的event.target返回被点击元素的子元素

我在包含图像的超链接上有一个jQuery click事件。超链接和图像都有单独的id。我希望当我单击超链接时,事件处理程序中的代码event.target.id会返回超链接id,因为事件绑定到超链接,但它会返回图像id 。这是为什么?有什么办法可以使与事件相关的元素始终成为event.target

HTML:

<div id="menuContainer">
    <ul id="menu">
        <li><a id="home"><img id="logo" src="img/logo.png" alt="logo"></a></li>
        <li><a id="about">Om oss</a></li>
        <li><a id="concept">Konsept</a></li>
        <li><a id="history">Data</a></li>
        <li><a id="store">Butikk</a></li>
    </ul>
</div>
<div id="frontpage"></div>
<div id="content"></div>

JS:

function Page(pageId,linkId,file,backgroundImg,showPage){
    this.id = pageId;
    this.link = linkId;
    this.content = file;
    this.img = backgroundImg;
    this.show = showPage;

    this.loadPage = function() {
        if (this.show && $cont.is(":hidden")) $cont.show();
        else if (!this.show && $cont.is(":visible")) $cont.hide();
        if (this.content != "") $cont.load(this.content);
        else $cont.html("");
        $("#frontpage").css("backgroundImage","url(img/" + this.img + ")");
    }
}

var pages = [];
var linkToPageId = {};

function addPage(linkId,showPage = true) {
    var pageId = pages.length;
    var newPage = new Page(pageId,showPage);
    pages.push(newPage);
    linkToPageId[linkId] = pageId;
}

addPage("home","","frontpage.jpg",false);

$("#menu a").click(function(event){
    console.log(event.target.id);
    pages[linkToPageId[event.target.id]].loadPage();
});

PS。我知道可以通过将特定linkId对象的Page更改为“ logo”而不是“ home”来解决此问题,但这有点使代码混乱。我想看看是否还有其他选择。

PSS。我也知道JS具有实际的Class es,而不是我使用的基于函数的“类”。这和我的问题无关。

fjbtxf 回答:jQuery click事件的event.target返回被点击元素的子元素

event.target将始终是调度事件的元素。如果单击容器内的元素,则无论侦听器附加到哪个元素,event.target都会是容器内的元素。

如果要引用侦听器所附加的元素,请使用thisevent.currentTarget

$("#menu a").click(function() {
  console.log(this.id);
  // pages[linkToPageId[this.id]].loadPage();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="menuContainer">
  <ul id="menu">
    <li>
      <a id="home"><img id="logo" src="img/logo.png" alt="logo"></a>
    </li>
    <li><a id="about">Om oss</a></li>
    <li><a id="concept">Konsept</a></li>
    <li><a id="history">Data</a></li>
    <li><a id="store">Butikk</a></li>
  </ul>
</div>
<div id="frontpage"></div>
<div id="content"></div>

$("#menu a").click(function() {
  console.log(event.currentTarget.id);
  // pages[linkToPageId[event.currentTarget]].loadPage();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="menuContainer">
  <ul id="menu">
    <li>
      <a id="home"><img id="logo" src="img/logo.png" alt="logo"></a>
    </li>
    <li><a id="about">Om oss</a></li>
    <li><a id="concept">Konsept</a></li>
    <li><a id="history">Data</a></li>
    <li><a id="store">Butikk</a></li>
  </ul>
</div>
<div id="frontpage"></div>
<div id="content"></div>

,

您使用event.currentTarget指向附加了侦听器的元素。它不会随着事件起泡而改变。

https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget

希望这很有帮助。

本文链接:https://www.f2er.com/2686244.html

大家都在问