Avatar billede thomaspape Nybegynder
07. maj 2006 - 23:11 Der er 8 kommentarer og
1 løsning

Marker åbnes altid ved den sidste tilføjet

Kære alle
Jeg har et lille problem. Nedennævnte gør det at, den åbner et info window - men dette info window er altid knyttet til den sidste  tilføjne. Så hvis jeg klikker på marker 1, åbnes "tekst 1" under "tekst 2" marker.

Hvad mangler jeg ?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA51oXegWMrTFGHJMXnnp6DBRwSlT_a-Z9ZB7lftQU-P4Mc3FE8xTIEuDNh_YWMylaLsFN_T9shiHx5g"
            type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[

    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());

        map.setCenter(new GLatLng(56.149849, 10.22389), 7);

    var point = new GPoint(10.39191, 55.398701);
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("Tekst 1" );
    });
    map.addOverlay(marker);

    var point = new GPoint(10.014225559, 55.7021874477);
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("tekst 2" );
    });
    map.addOverlay(marker);


      }
    }

    //]]>
    </script>
  </head>
  <body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 600px; height: 600px"></div>
  </body>
</html>
Avatar billede olebole Juniormester
08. maj 2006 - 00:21 #1
<ole>

    var point2 = new GPoint(10.014225559, 55.7021874477);
    var marker2 = new GMarker(point2);
    GEvent.addListener(marker2, "click", function() {
    marker.openInfoWindowHtml("tekst 2" );
    });
    map.addOverlay(marker2);

/mvh
</bole>
Avatar billede olebole Juniormester
08. maj 2006 - 00:24 #2
- og lige, så du ikke skal til at åbne et tredie spørgsmål, så lukker du dem igen ved klik udenfor markers med:

    GEvent.addListener(map, "click", function(marker, point) {
        if (!marker) map.closeInfoWindow();
    });
Avatar billede olebole Juniormester
08. maj 2006 - 00:40 #3
Faktisk kan du spare oprettelsen af en variabel ved at skrive:

    point = new GPoint(10.014225559, 55.7021874477);
    var marker2 = new GMarker(point);

- altså genbruge variablen 'point' og blot hælde nyt indhold i den.

I din oprindelige kode oprettede du to marker-variabler med samme navn - som hver indeholdt en instans af marker-objektet. Den ene overskriver ikke den anden, da de begge erklæres med keyword'et 'var' ... til gengæld kan JS ikke kende forskel på dem, når der senere skal kaldes fra event-handleren.

Derudover ser jeg zq pludselig en fejl i koden i mit første indlæg. Hele den nye kode:

    point = new GPoint(10.014225559, 55.7021874477);
    var marker2 = new GMarker(point);
    GEvent.addListener(marker2, "click", function() {
    marker2.openInfoWindowHtml("tekst 2" );
    });
    map.addOverlay(marker2);
Avatar billede olebole Juniormester
08. maj 2006 - 00:48 #4
- og grunden til, man laver den slags fejl, er, at det er dårlig OOP, Google skriver. Man bør ikke behøve tænke over, hvad objekt-instansen hedder i en event-handler ... der bør man kalde med 'this'. Dette er bedre (og med lidt kønnere indrykning):

function load() {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
       
        map.setCenter(new GLatLng(56.149849, 10.22389), 7);
       
        var point = new GPoint(10.39191, 55.398701);
        var marker = new GMarker(point);
        GEvent.addListener(marker, "click", function() {
            this.openInfoWindowHtml("Tekst 1" );
        });
        map.addOverlay(marker);
       
        point = new GPoint(10.014225559, 55.7021874477);
        var marker2 = new GMarker(point);
        GEvent.addListener(marker2, "click", function() {
            this.openInfoWindowHtml("tekst 2" );
        });
        map.addOverlay(marker2);
    }
}
Avatar billede olebole Juniormester
08. maj 2006 - 00:51 #5
"- og grunden til, man laver den slags fejl ..." - pis med dig olebole ... den kan du ikke bortforklare  :D
Avatar billede thomaspape Nybegynder
08. maj 2006 - 21:34 #6
Hej igen

Det virker ikke helt, jeg har gjort som du skrev -se denne

var point = new GPoint(10.2556037553, 55.0876298652);
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("Læs mere her...</a>");
    });
    map.addOverlay(marker);

    point = new GPoint(10.014225559, 55.7021874477);
    var marker2 = new GMarker(point);
    GEvent.addListener(marker2, "click", function() {
    marker.openInfoWindowHtml("Læs mere her...</a>");
    });
    map.addOverlay(marker2);

    point = new GPoint(23.6572369551, 35.4950231457);
    var marker3 = new GMarker(point);
    GEvent.addListener(marker3, "click", function() {
    marker.openInfoWindowHtml("Læs mere her...</a>");
    });
    map.addOverlay(marker3);
Avatar billede thomaspape Nybegynder
09. maj 2006 - 09:49 #7
Hej igen, jeg skal lige tilføje at nu sker der det at info window altid åbnes i tilknytning til den første marker, som dog ikk ehar fået marker nummer.

vh Thomas
Avatar billede thomaspape Nybegynder
10. maj 2006 - 22:42 #8
Hej igen
Jeg har forsøgt mig lidt igen uden held, har dog fundet dette svar men det er måske bare et generelt svar, er der ikke en der kan gennemskue dette ?

"This is a very common problem.

Short answer:
You need to make the marker variable local to the GooglePin function.
Put a 'var' in front of it on the first line of GooglePin.


Long answer:
You need to create a closure containing the marker varaible around the
anonymous function you are passing to addListerner as the click event
handler. For more information, google for javascript+closure. This is a
powerful feature of javascript, but its misuse can be troublesome.
People familiar with C, C++ and Java may not expect the behaviors that
result from closures. "

vh Thomas
Avatar billede thomaspape Nybegynder
11. maj 2006 - 22:19 #9
Så fandt jeg ud af det  i denne er der en fejl.

marker.openInfoWindowHtml("Læs mere her...</a>");

Der skal stå marker4.openInfoWindowHtml("Læs mere her...</a>");

Altså der skal indføjes et tal (her 4) efter marker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester