У меня есть 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. Я знаю, что это можно исправить, если изменить linkId
этого указанного объекта c Page
на "lo go" вместо "home", но это как бы спагеттифицирует код. Я хотел бы увидеть, если есть какие-либо другие варианты в первую очередь.
PSS. Я также знаю, что JS имеет действительные Class
es вместо "класса" на основе функций, который я использовал. Это не имеет отношения к моему вопросу.