gpt4 book ai didi

javascript - jQuery 单击事件的 event.target 返回被单击元素的子元素

转载 作者:行者123 更新时间:2023-11-28 11:43:12 24 4
gpt4 key购买 nike

我在包含图像的超链接上有一个 jQuery 单击事件。超链接和图像都有单独的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, file, backgroundImg, showPage = true) {
var pageId = pages.length;
var newPage = new Page(pageId, linkId, file, backgroundImg, 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。我知道可以通过将此特定 Page 对象的 linkId 更改为“logo”而不是“home”来快速修复此问题,但这有点使代码变得像意大利面条一样。我想先看看是否还有其他选择。

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

最佳答案

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>

关于javascript - jQuery 单击事件的 event.target 返回被单击元素的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59981526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com