Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypty JS w divie
Forum PHP.pl > Forum > Po stronie przeglądarki
michalcpp
Mam na mojej stronie dwa pliki: index.php i settings.php;
Na stronie index.php znajduje sie div do ktorego laduję zawartość strony settings.php za pomocą ajax'a. Strona sie dobrze laduje do diva, lecz wszystkie skrypty JS na tej stronie nie dzialaja poprawnie. Gdy wchodze normalnie do pliku settings.php wszystkie skrypty dzialają, lecz gdy laduję ją do diva, zaden skrypt JS nie dziala.
Comandeer
jQuery radzi sobie z tym tak, że skrypty przepuszcza przez eval (czyli marnie sobie radzi wink.gif).

Co to są za skrypty? Nie da się ich po prostu przerzucić do callbacku żądania ajaksowego?
michalcpp
Są to skrypty JQuery UI, na przyklad takie:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $("#potwierdz")
  3. .mouseover(function() {
  4. $("#potwierdz").stop().animate({left: 300, height: 50, width: 50}, {duration: 300, easing: 'easeOutBack'});
  5. })
  6. .mouseout(function() {
  7. $("#potwierdz").stop().animate({left: 305, height: 40, width: 40}, {duration: 300, easing: 'easeOutBack'});
  8. });
  9.  
  10. });
[JAVASCRIPT] pobierz, plaintext


jak wejde na strone settings.php (na ktorej wlasnie sa te skrypty) to wszystko dziala poprawnie, lecz skrypty nie dzialaja gdy laduję ja do diva za pomoca ajax'a w taki sposob:

[JAVASCRIPT] pobierz, plaintext
  1. var object = false;
  2.  
  3. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  4. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  5.  
  6. if (object.readyState==4 || object.readyState==0)
  7. {
  8. var obj = document.getElementById('DivUstawienia');
  9. object.open("GET", 'settings.php');
  10. object.onreadystatechange = function()
  11. {
  12. if (object.readyState == 4 && object.status == 200)
  13. obj.innerHTML= object.responseText;
  14. }
  15. object.send(null);
  16. }
[JAVASCRIPT] pobierz, plaintext

nospor
Skoro uzywasz jQuery to i do ajaxa i innych przypisan uzywaj jQuery a wszystko bedzie dzialac.
.innerHTML nie interpretuje kodu js - zagadka rozwiązana

zamiast:
obj.innerHTML= object.responseText;

daj:
jQuery(obj).html(object.responseText);
michalcpp
Uzylem tego
jQuery(obj).html(object.responseText);
zamiast
obj.innerHTML= object.responseText;
i strona przestala dzialac...

Gdy probuje wejsc na strone login.php(na niej znajduje sie ten skrypt ladujacy strone settings.php do diva) przez sekunde cala zawartosc ztrony jest wyswietlana, lecz pozniej wszystko znika,a w konsoli chrom'a wyswietla sie tylko takie cos:
  1. <head>
  2. <script type="text/javascript" charset="iso-8859-2" src="http://go.idmnet.bbelements.com/please/showit/0/0/0/1/? typkodu=js&one2n1=/1276/1/1/1/;1276.1.1.1;&one2n=1&ubl=pl&ucd=24&uce=1&uje=1&uah=1040&uaw=1920&uhe=1080&uwi=1920&uto=-120&uti=1436265954249&ibbid=BBID-01-01109791535818535&alttext=0&border=0&bust=0.30917197722010314&target=_top"></script>
  3. </head>
  4. </html>

a strona sie ciagle laduje i nic to nie daje

A gdy wejde na strone settings.php wszystko dziala poprawnie.
nospor
POkaz jak DOKLADNIE wyglada plik settings.php oraz login.php
Comandeer
Masz użyć zamiast całego tego ajaksa jego odpowiednika w jQuery ALBO przerzucić wywołania tych funkcji do object.onreadystatechange (proponuję rozwiązanie #1)

Co do problemu z login.php - wygląda jak jakiś skrzaczony skrypt reklam…
tzm
Delegacje w jQuery ?

  1. $(document).on('event', 'selektor', function(){});
Comandeer
@tzm tak byłoby prosto, gdyby nie to, że jQuery UI nie bardzo z tym działa wink.gif Ono musi operować na konkretnym elemencie. Dlatego najlepiej jest wywoływanie jego metod przerzucić jako callback dla Ajaksa. Inny sposób to podpięcie się przez MutationObserver i badanie czy nowy element tego typu nie jest wstawiany do dokumentu. Odmianą tego sposobu jest podpięcie w CSS animacji/przejścia do tego elementu i wykrywanie wstawienia go przez animationstart/transitionstart.

Inna rzecz, że pokazany tutaj skrypt z $.fn.mouseover faktycznie bez problemu zadziała z event delegation (bo nie jest to jQuery UI, jak głosi reszta postu).
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.