Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie zmiennej do funkcji przez wartość
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
white_tigger
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?
erix
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.
white_tigger
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.
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.