Heisann.
Koden over genererer en liste med data fra en ekstern JSON-kilde, og hvert a-element får en click-event. Dette fungerer strålende. Nederst ser dere at jeg kaller på funksjonen refresh() i listview-objektet mitt:
Problemet her er at click-eventen forsvinner når jeg kjører refresh. Visuelt sett fungerer det fint og den oppfører seg som jeg vil, og feilkonsollen er helt tom. Grunnen til at jeg skriver til array for så å loope ut igjen er at jeg behandler radene i mellomtiden, som jeg har strippet ut av koden over. Jeg er sikker på at feilen ikke ligger i det jeg har tatt bort, da jeg selvfølgelig har forsøkt å kommentere det ut så koden ser ut som den over. Fortsatt det samme.
Er det noen som vet hvorfor click-eventen forsvinner etter at refresh() har gjort jobben sin?
Takk.
Har fått et gjennombrudd i denne saken. Ved å kommentere ut/droppe $(this).remove() etter at jeg har lagt elementet til array-et så fungerer det utmerket. Selv synes jeg det er litt rart... Om jeg ikke fjerner de originale listeelementene ville jeg jo trodd at de nye som blir loopet ut kun blir lagt til etter. Hvorfor blir de gamle overskrevet i each-loopen av seg selv?
Om jeg dropper refresh-metoden blir outputen slik:
Med metoden blir det slik, som ønskelig:
Click-event fungerer også.
Kode
$.each(json.rutiner, function(i, item) { $('<li></li>').appendTo(self.dom_list); $('<a href="#">' + item.tittel + '</a>').click(function() { self.installRoutine(item.id); return false; }) .appendTo(self.dom_list + ' li:last-child'); }); f.listview.refresh();
Kode
this.list_items = []; this.refresh = function() { var $dom_list = $('.listview'); var self = this; // Push all list items to array before removing it $dom_list.find('li').each(function(){ self.list_items.push($(this)); $(this).remove(); }); // (Annen kode her. Urelevant.) // Append list items to DOM $.each(self.list_items, function() { // (Annen kode. Urelevant) // Append list item $dom_list.append($(this)); }); }
Er det noen som vet hvorfor click-eventen forsvinner etter at refresh() har gjort jobben sin?
Takk.
Har fått et gjennombrudd i denne saken. Ved å kommentere ut/droppe $(this).remove() etter at jeg har lagt elementet til array-et så fungerer det utmerket. Selv synes jeg det er litt rart... Om jeg ikke fjerner de originale listeelementene ville jeg jo trodd at de nye som blir loopet ut kun blir lagt til etter. Hvorfor blir de gamle overskrevet i each-loopen av seg selv?
Om jeg dropper refresh-metoden blir outputen slik:
Kode
<ul id="routines" class="listview sort dividers filter" placeholder="Søk"> <li>…</li> <li>…</li> </ul>
Kode
<ul id="routines" class="listview sort dividers filter" placeholder="Søk"> <li class="divider">F</li> <li>…</li> <li class="divider">S</li> <li>…</li> </ul>