Freezedevil
Lieutenant
- Registriert
- Mai 2011
- Beiträge
- 641
Servus,
ich erzeuge mir per JS Elemente einer unordered list und möchte an jedes Element einen Funktionsaufruf hängen, welcher unter anderem den Index enthält. Der erste Ansatz war folgender:
playlist: Array von Objekten die im Wesentlichen nur die Namen der Einträge enthalten
list: ist nach der Zuweisung ein <ul> Element
Rest sollte ersichtlich sein.
Das Problem hierbei ist jedoch, dass ich unabhängig von dem Eintrag auf den ich klicke immer die selbe Zahl bekomme (immer die Länge der Liste). Das legt die Vermutung nahe, dass hier call-by-reference angesagt ist, wodurch das Ergebnis nachvollziehbar wäre.
Aus diesem Grund habe ich mir folgende Lösung zurecht geschustert:
Ich finde es jedoch unglaublich hässlich dafür extra noch eine Funktion zu spendieren und wollte daher wissen ob jemand von euch einen eleganteren Weg sieht das Problem zu lösen.
Danke für eure Antworten.
ich erzeuge mir per JS Elemente einer unordered list und möchte an jedes Element einen Funktionsaufruf hängen, welcher unter anderem den Index enthält. Der erste Ansatz war folgender:
playlist: Array von Objekten die im Wesentlichen nur die Namen der Einträge enthalten
list: ist nach der Zuweisung ein <ul> Element
Rest sollte ersichtlich sein.
Code:
function buildPlaylist (playlist) {
list = document.getElementById('playlist');
list.innerHTML = "";
for (i=0; i<playlist.length; ++i) {
item = document.createElement('li');
item.className = "playlistItem";
item.appendChild(document.createTextNode(playlist[i].label));
item.addEventListener('click', function(){playerAction({"action": "playlist", "item": i})}, false);
list.appendChild(item);
}
}
function playerAction(action) {
...
switch (action.action) {
case "playlist":
//play specific item in current playlist
console.log(action.item);
break;
...
}
}
Aus diesem Grund habe ich mir folgende Lösung zurecht geschustert:
Code:
function buildPlaylist (playlist) {
list = document.getElementById('playlist');
list.innerHTML = "";
for (i=0; i<playlist.length; ++i) {
item = document.createElement('li');
item.className = "playlistItem";
item.appendChild(document.createTextNode(playlist[i].label));
item.index = i;
item.addEventListener('click', help, false);
list.appendChild(item);
}
}
function help (e) {
i = e.srcElement.index;
playerAction({"action": "playlist", "item": i});
}
playerAction identisch
Ich finde es jedoch unglaublich hässlich dafür extra noch eine Funktion zu spendieren und wollte daher wissen ob jemand von euch einen eleganteren Weg sieht das Problem zu lösen.
Danke für eure Antworten.