mboost-dp1
Hjælp til javascript
- Forside
- ⟨
- Forum
- ⟨
- Software
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...
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...
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.
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.
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.