У меня есть функция javascript, которая создает несколько блоков div, содержащих изображения, и применяет событие onclick к каждому из них. Когда вы нажимаете на изображение, оно должно открывать соответствующую веб-страницу; однако кажется, что функция применяет одно и то же событие onclick к каждому из них (она не различает каждое изображение).
Вот код:
function UpdateDock() {
$.get("apps", function(data){
var Dock = document.getElementById("Dock");
var Apps = JSON.parse(data);
for (var App in Apps) {
if (Apps[App]["Dock"] == "1") {
// Create a box to store the application
var ApplicationBox = document.createElement("div");
ApplicationBox.className = "App"
// Put the icon inside the box
var Icon = document.createElement("img");
Icon.src = `static/images/ApplicationIcons/${Apps[App]["Folder"]}.png`;
Icon.id = Apps[App]["URL"];
Icon.onclick = function() {OpenApplication(Icon.id)};
// Put the icon in the box and the box in the dock
ApplicationBox.appendChild(Icon);
Dock.appendChild(ApplicationBox);
}
}
});
}
Вот что я я пытаюсь сделать:
Jquery обращается к маршруту на сервере, чтобы получить веб-страницы (приложения), которые должны отображаться в div в нижней части экрана (Dock ).
Этот маршрут отправляет объект json, который указывает, какие веб-страницы доступны, какие из них отображать и соответствующие URL-адреса.
Создается div для хранения изображения, связанного с приложением, чтобы его можно было выровнять.
Изображение вставляется в div.
Событие onclick добавляется к изображению, чтобы оно открывало соответствующий URL-адрес при нажатии (мне нужно, чтобы это было событие onclick - поскольку оно открывает его в iframe, встроенном в ту же страницу).
Div вставлен в док.
Это хорошо работает, когда есть только одно приложение (веб-страница), но когда есть более одного приложения, все они переносятся на один и тот же URL-адрес onclick. На стороне сервера приложения извлекаются в алфавитном порядке (они считываются из файловой системы), и кажется, что URL-адрес, прикрепленный ко всем приложениям, такой же, как и первый. Например, если у меня есть приложения «Банан» и «Кошка», оба откроют страницу «Банан».
Я могу попробовать изменить функцию «OpenApplication», чтобы открывать URL-адрес на основе идентификатора отправителя ( который можно назвать соответствующим образом при добавлении к l oop), но мне понадобится способ ссылки на отправителя. Вот текущая функция:
function OpenApplication(Application) {
// Changes the active application and animates the transition
var ActiveApplication = document.getElementById("ActiveApplication");
console.log(Application);
ActiveApplication.style.animation = "Hide 1s";
ActiveApplication.src = Application;
ActiveApplication.style.animation = "Show 1s";
}
Вместо того, чтобы передавать Application в качестве переменной, есть ли способ указать, какое событие onclick активировало функцию?
Думаю, здесь есть два вопроса :
Что не так с моим l oop? Почему для каждого приложения применяется один и тот же URL-адрес?
Могу ли я решить эту проблему, указав отправителя в функции OpenApplication? Если да, то как мне сослаться на отправителя?