Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> onchange i skrypt w innym pliku
clansman5
post 25.12.2006, 12:13:53
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował clansman5 25.12.2006, 12:15:14
Go to the top of the page
+Quote Post
Zajec
post 25.12.2006, 18:25:01
Post #2





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


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();"


Ten post edytował Zajec 25.12.2006, 18:25:40
Go to the top of the page
+Quote Post
clansman5
post 25.12.2006, 23:24:58
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


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>


Ten post edytował clansman5 25.12.2006, 23:41:45
Go to the top of the page
+Quote Post
Zajec
post 26.12.2006, 09:50:09
Post #4





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


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();"
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 19:45