Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykonanie JS na elementach pobranych z AJAXA
Forum PHP.pl > Forum > XML, AJAX
reyne
Witam, przypuśćmy mam plik ladowarka.php, w którym mam kod JavaScript i ładuję sobie nim zawartość (dla przykładu blok <div id="tekst">jakis tekst</div>) do diva z pliku dane.php (za pomocą JQUERY).
Jak operować teraz na załadowanym bloku? Bo kod JS, który mam w pliku ladowarka.php, jakby nie widzi tego elementu pobranego dynamicznie, jednym z rozwiązań jest umieszczenie tego kodu też w pliku dane.php, wtedy wszystko działa.
Pytanie: czy trzeba zawsze dołączać kod JS do pliku pobieranego ajaxem?
nospor
MOze uraczylbys nas kodem jaki masz bysmy wiedzieli o czym konkretnie mowisz.
markonix
http://api.jquery.com/on/ (wcześniej live)
nospor
To zalezy co robi, dlatego prosilem o kod. Live (on) to jedno z kilku rozwiazan
celbarowicz
W ładowarce umieść : <script type="text/javascript" src="tutaj_wszystkie_funkcje.js"></script>.
U mnie takie coś działa na każdym wklejanym pliku.
reyne
kod jest zbyt skomplikowany i dużo plików musiałbym dołączać tongue.gif, chodzi ogólnie o zasadę jak powinno się to robić, zwykle robię to właśnie tak, że dołączam bibliotekę jquery (wraz ze skryptem js) zarówno do "ladowarki" jak i pliku, który jest ładowany, wtedy nie ma problemu.. tylko czy np dołączanie kodu i w ładowarce i w pliku nie opóźnia działania strony?
markonix
No jest to bezsensu, zgadza się.

Spróbowałeś mojej metody?
reyne
No właśnie nie wiem zbytnio jak się za to zabrać, dlatego na potrzeby stworzyłem prosty skrypt, który pobiera button z pliku zewnętrznego ajaxem. Po kliknięciu buttona powinna wyświetlić się wiadomość. Wyświetla się dopiero jeżeli dołącze JS i JQUERY także do pliku pobieranego.

plik index.php

  1. <?php
  2.  
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="utf-8">
  7. <title>Ładowarka</title>
  8. </head>
  9. <body>
  10. <script src="js/jquery-1.9.1.min.js"></script>
  11. <script src="js/laduj.js"></script>
  12.  
  13. <button id="zaladuj-plik">Załaduj plik</button>
  14.  
  15. <div id="content"></div>
  16.  
  17. </body>
  18. </html>
  19. ';
  20. ?>
  21.  


plik laduj.js

  1. $(document).ready(function() {
  2.  
  3. $("#zaladuj-plik").click(function() {
  4. $.ajax({
  5. type: "GET",
  6. url: "dane.php",
  7. beforeSend: function(html){
  8. $("#content").html("Czekaj..");
  9. },
  10. success: function(data){
  11. $("#content").html(data);
  12. }
  13. });
  14. });
  15.  
  16. $("#wyswietl-wiadomosc").click(function() {
  17. alert('wiadomosc');
  18. });
  19.  
  20. });
  21.  


plik dane.php

  1. <?php
  2.  
  3. /* Jeśli dodam te pliki, skrypt działa
  4. echo '
  5. <script src="js/jquery-1.9.1.min.js"></script>
  6. <script src="js/laduj.js"></script>
  7. ';
  8. */
  9.  
  10. roznorodne dane ;)
  11. <button id="wyswietl-wiadomosc">Wyświetl wiadomość</button>
  12. ';
  13. ?>


Jak się do tego .on() będzie mieć?

Ok działa tongue.gif

ROZWIĄZANIE:

zdarzenie
  1. $("#wyswietl-wiadomosc").click(function() {
  2. alert('wiadomosc');
  3. });


trzeba zmienić na

  1. $('#content').on('click', '#wyswietl-wiadomosc', function (){
  2. alert('wiadomosc');
  3. });


Dzięki za podpowiedź smile.gif
markonix
No dobrze, ale ja tu nigdzie nie widzę zastosowanego on.
Domyślnie jQuery działa na załadowanym DOM w momencie otwarcia strony, powyższe zmienia to zachowanie działając także na dynamicznie dodanych danych.

http://stackoverflow.com/questions/1359018...c-html-elements
reyne
Akurat się minęliśmy z odpowiedzią .on() załatwia sprawę tongue.gif powyżej zamieściłem rozwiązanie, że też wcześniej tego nie używałem, za każdym razem dodawałem js w każdym pliku wink.gif Dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.