Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: onchange i skrypt w innym pliku
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
clansman5
Potrzebuje wygenerowac skrypt JS za pomoca php i wykonac go w zdarzeniu onchange. Przeprowadzam proste proby i nawet najprostszy kod nie chce mi dzialac:

  1. <table cellspacing="2">
  2.  
  3. <script id="skrypt" type="text/javascript" src=""></script>
  4.  
  5. <tr><td>Katalog:</td></tr>
  6. <tr><td>
  7. <select id="dir_sel" name="katalog" onchange="document.getElementById('skrypt').src='makejs.php';">
  8. <option value="kat1">katalog1</option>
  9. <option value="kat2">katalog2</option>
  10. </select>
  11. </td></tr>


A oto makejs.php

  1. window.alert('hello from makejs.php');


Dlaczego to nie dziala? Jezeli na sztywno w <script id="skrypt" type="text/javascript" src=""> w src wpisze makejs.php to dziala. Za pomoca zdarzenia onchange ANI RAZU nie udalo mi sie wywolac skryptu z pliku makejs.php.
Zajec
Po pierwsze, zastanawiam się, czy src nie jest czasarmi atrybutem read only?

Po drugie, zmieniasz src elementu, przez który parser przegladarki już przeszedł. Więc zmiana src chyba nie spowoduje ponownego wykonania dokumentu, który się znajduje w ładowanym przez src pliku.

Jakbym to rozwiązał:

W onchange umieszczasz skrypt JS, który:
1) tworzy nowy element <script> (document.createElement)
2) ustawia temu elementowi atrybut src (na makejs.php)
3) osadza stworzony element w body (appendChild)


Jeśli i to by nie zadziałało, to spróbuj jeszcze kod z makejs.php umieścić w funkcji, którą wywyołasz także w onchange. Na przykład:

Kod
function testowa()
alert('hello from makejs.php');
}
Kod
onchange="..... testowa();"
clansman5
dzieki, sprawdze to. Po dalszych testach mojego skryptu okazalo sie, ze na IE dziala a na FF nie. Przetestuje Twoja metode i poinformuje o rezultatach

---------------EDIT-------------------
Jestem juz po testach, wielkie dzieki za pomoc, przedstawiony przez Ciebie sposob dziala. A dzialajace rozwiazanie jest nastepujace:

  1.  
  2. <script type="text/javascript">
  3.  
  4. function create()
  5. {
  6. var skrypt = document.createElement("script");
  7. skrypt.id = "moj_skrypt";
  8. skrypt.src = "makejs.php";
  9. document.body.appendChild(skrypt);
  10. }
  11.  
  12.  
  13. </head>
  14.  
  15.  
  16. <table cellspacing="2">
  17.  
  18. <tr><td>Katalog:</td></tr>
  19. <tr><td>
  20. <select id="dir_sel" name="katalog" onchange="java script:create();">
  21. <option value="kat1">katalog1</option>
  22. <option value="kat2">katalog2</option>
  23. </select>
  24. </td></tr>
  25.  
  26. </body>
  27. </html>
Zajec
Cieszę się, że pomogłem :-)

Zauważ tylko jeszcze, że kod umieszczany w onchange jest automatycznie interpretowany jako kod JS. Nie trzeba więc już tam używać pseudoptorokołu javascript. Wystarczy samo
Kod
onchange="create();"
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.