Hjælp til javascript


Gå til bund
Gravatar

#1 Wolly 22. sep. 2016 23:03

Håber en venlig person kan hjælpe, jeg er ved at blive sindsyg af dette problem, og det går igen mange steder på min side. Her kommer et eksempel:

Jeg er ved at lave en side i html5. Jeg har lavet et modul der fungerer ligesom flags i Drupal ( eller like knap på facebook ).

En button der er defineret som class=flag. Sidst på siden loader jeg en javascript fil som definerer hvad der sker når man trykker på knapper der har class=flag. Aktiverer en spinner og gemmer valg i database o.s.v.

Alt virker fint når jeg loader siden normalt, men hvis jeg loader min like knap via ajax ( sammen med andet indhold ), virker skriptet ikke på knappen... Smider jeg et link med til scriptet i det content der bliver returneret via ajax, virker det hele igen.

Efter timers søgen på nettet, har jeg fundet mange forskellige forklaringer på problemet. Nogen forslår callbacks andre en initiation() funktion, man kan kalde efter man har indsat teksten, men det giver ikke rigtig mening, for hvis jeg f.eks. loader noget content med bootstrap tabs, virker de fint selv om jeg ikke sender link med til bootstrap.js. Så jeg tænker der må være en simpel løsning...
- Wolly -
Gravatar

#2 mrtb 23. sep. 2016 05:04

Jeg gætter på at du bruger jQuery til at binde din click listener?
I så fald er løsningen noget i den stil her:
$("body").on("click", ".flag", function(){
console.log("din kode her");
});
På den måde sætter du din event listener på body i stedet, og den holder så øje med click events på alle class="flag" på siden.
I stedet for body kan du med fordel gøre det mere specifikt, hvis du f.eks. altid loader knappen ind i en <footer>, som ikke loades asynkront.

Edit: Forklaringen på dit problem er højst sandsynligvis at du pt. binder click listeneren på document ready. Det betyder at hvis du først henter din knap ind efterfølgende, så vil den ikke have fået tilføjet listeneren.
Gravatar

#3 Wolly 23. sep. 2016 08:47

@mrtb du er simpelthen den bedste!!! Dine antagelser er rigtige, og din løsning virker perfekt... Jeg takker 1000 gange for hjælpen :-)
- Wolly -
Gravatar

#4 mrtb 23. sep. 2016 13:08

Det var så lidt :)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login