Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazywanie zmiennej do funkcji przez wartość
white_tigger
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.10.2010
Skąd: Rzeszów

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


Mam taki problem:
Chcę dwukrotnie wyświetlić mapkę Google. W związku z tym tworzę dwa znaczniki "div" i muszę nadać im unikalne nazwy, tak aby Google mogło prawidłowo zainicjować mapy. Nazwy muszą być unikalne i generowane automatycznie. Kod obecnie wygląda tak:
  1. <!DOCTYPE html>
  2. <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
  3. <script type="text/javascript">
  4. var id = Math.floor(10000000*Math.random());
  5. document.write('<div id="map'+id+'" style="width: 400px; height: 400px;"></div><br>');
  6. google.maps.event.addDomListener(window,'load',function(){
  7. var myLatLng = new google.maps.LatLng(50.0375, 22.0049);
  8. var map = new google.maps.Map(document.getElementById('map'+id), {
  9. zoom: 14,
  10. center: myLatLng,
  11. mapTypeId: google.maps.MapTypeId.ROADMAP});
  12. var marker = new google.maps.Marker({
  13. position: myLatLng,
  14. map: map,
  15. title: 'Old marketplace in Rzeszow'});
  16. });
  17.  
  18. id = Math.floor(10000000*Math.random());
  19. document.write('<div id="map'+id+'" style="width: 400px; height: 400px;"></div><br>');
  20. google.maps.event.addDomListener(window,'load',function(){
  21. var myLatLng = new google.maps.LatLng(50.0375, 22.0049);
  22. var map = new google.maps.Map(document.getElementById('map'+id), {
  23. zoom: 14,
  24. center: myLatLng,
  25. mapTypeId: google.maps.MapTypeId.ROADMAP});
  26. var marker = new google.maps.Marker({
  27. position: myLatLng,
  28. map: map,
  29. title: 'Old marketplace in Rzeszow'});
  30. });
  31. </script>
  32. </body>
  33. </html>

Podejrzewam, że do funkcji "document.getElementById()" zmienna "id" jest przekazywana poprzez referencję, lub docelowe id (nazwa znacznika "div") jest składane dopiero w momencie wywołania zdarzenia 'load', bo obie mapki są podpinane pod drugi znacznik "div".
Jeżeli zrobię taki myk, że w drugim fragmencie zmienię nazwę zmiennej z "id" na "id2", to wszystko działa poprawnie:
  1. <!DOCTYPE html>
  2. <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
  3. <script type="text/javascript">
  4. var id = Math.floor(10000000*Math.random());
  5. document.write('<div id="map'+id+'" style="width: 400px; height: 400px;"></div><br>');
  6. google.maps.event.addDomListener(window,'load',function(){
  7. var myLatLng = new google.maps.LatLng(50.0375, 22.0049);
  8. var map = new google.maps.Map(document.getElementById('map'+id), {
  9. zoom: 14,
  10. center: myLatLng,
  11. mapTypeId: google.maps.MapTypeId.ROADMAP});
  12. var marker = new google.maps.Marker({
  13. position: myLatLng,
  14. map: map,
  15. title: 'Old marketplace in Rzeszow'});
  16. });
  17.  
  18. id2 = Math.floor(10000000*Math.random());
  19. document.write('<div id="map'+id2+'" style="width: 400px; height: 400px;"></div><br>');
  20. google.maps.event.addDomListener(window,'load',function(){
  21. var myLatLng = new google.maps.LatLng(50.0375, 22.0049);
  22. var map = new google.maps.Map(document.getElementById('map'+id2), {
  23. zoom: 14,
  24. center: myLatLng,
  25. mapTypeId: google.maps.MapTypeId.ROADMAP});
  26. var marker = new google.maps.Marker({
  27. position: myLatLng,
  28. map: map,
  29. title: 'Old marketplace in Rzeszow'});
  30. });
  31. </script>
  32. </body>
  33. </html>

Kod jednak wtedy nie jest identyczny, a chcę z tego zrobić powtarzalny BBCode dry.gif
Być może wiecie jak obejść tę przypadłość, albo macie jakiś inny pomysł na tworzenie unikalnych nazw lub wiązanie funkcji wywoływanej przez zdarzenie "load" ze znacznikiem "div"?

Z góry wielkie dzięki za pomoc smile.gif

Czyżby problem nie miał prostego rozwiązania?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czyżby problem nie miał prostego rozwiązania?

Ma. Rozwiązanie jest bardzo proste, a wynika z Twojego błędnego rozumowania, jeśli chodzi o kolejność:

[JAVASCRIPT] pobierz, plaintext
  1. document.write('<div id="map'+id+'" style="width: 400px; height: 400px;"></div><br>');
  2. google.maps.event.addDomListener(window,'load',function(){
[JAVASCRIPT] pobierz, plaintext

Ten kawałek kodu jest wykonywany asynchronicznie. Czyli ładowanie mapki nie następuje w chwili jej wstawienia - GMaps czeka aż cała zawartość strony jest załadowana (o czym mówi zdarzenie load). Do tej pory zmienna zdąży już być nadpisana przez kolejną jej modyfikację. winksmiley.jpg Więc każda instancja musi mieć osobną zmienną z identyfikatorem.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
white_tigger
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.10.2010
Skąd: Rzeszów

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


To, o czym napisałeś, jest w sumie dokładnie opisane w moim poście. Rozumiem w czym rzecz, dlatego pytanie "jak przekazać do funkcji wartość ustaloną w momencie przypisania tej funkcji do zdarzenia, a nie zmienną?" pozostaje bez odpowiedzi.

Ale nie zawracam już Wam głowy - pokombinuję nad innym sposobem realizacji tego celu.
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 Aktualny czas: 20.08.2025 - 04:47