Bonjour,

Je suis nouveau dans le vaste monde du javascript et j'aurais besoin de vos lumières.

J'ai une application développer sous PhoneGap donc HTML 5 et Javascript. A l'intérieure de cette application, j'ai une page d'accueil jquery mobile avec des rubriques dans un fichier XML qui me génère donc une page intermédiaire puis une page avec mes thèmes. Ce qui donne : Accueil -> Sous rubriques -> Thème

Dans mon fichier XML avec tous mes thèmes, j'ai leur nom, l'adresse, le numéro de téléphone... ainsi que la latitude et la longitude.
Ma latitude et ma longitude sont donc appelées dans mon javascript de ma page ce qui me permet d'ajouter un marker sur chacun des thèmes.

Mon problème : mon marker se positionne sur la map parfaitement quand je clique sur un thème. Je reviens donc sur la page précédente et clique sur un nouveau thème. MAIS ! Ma map ne se charge qu'une fois donc je retrouve ici la carte avec mon marker du premier thème. Je ne sais comment reset la fonction pour repasser dans la boucle et récupérer mon nouveau marker.

Une suggestion ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
 
var carte_charge        = false; // variable qui détermine si la carte google est déjà chargé, ici à non car pas encore
		var tableau_oeuvres = []; // tableau qui sotck notre liste de oeuvres
		var oeuvre          = null; // ici, variable contenant un seul oeuvres (pour la fiche)
		var ma_lat              = ''; // la variable ma_lat contiendra si on a phonegap compatible notre latitude
		var ma_lon              = ''; // la variable ma_lon contiendra si on a phonegap compatible notre longitude
		var liste_theme          = '';
		var monumentId = '';
 
 
[]
 
 
		function chargeFiche(appli) // fonction d'affichage de l'écran fiche propre à un theme
		{
			for (var i = 0; i < tableau_oeuvres.length; i++) // on parcour notre tableau de oeuvre
 
			{
				if (tableau_oeuvres[i].id == appli) // si l'élément du tableau à sa propriété "id" identique à la valeur de resto
				{
 
					oeuvre = tableau_oeuvres[i]; // on récupère dans notre variable oeuvre l'élément du tableau au complet
					monumentId = oeuvre.id;
					// on charge dans les différentes zone HTML les valeurs de notre variable oeuvre
					$('#fiche_url').attr('href', oeuvre.url); // ici, attr() permet de glisser l'adresse URL dans notre balise a (<a href="url")
					$('#fiche_addr').text(oeuvre.addr); // ici, l'adresse du oeuvre est en texte d'ou l'usage de text()
					$('#fiche_nom').text(oeuvre.nom); // pareil
					$('#fiche_telephone').text(oeuvre.tel); // pareil
					$('#fiche_image').attr('src', 'data/img/' + oeuvre.img); // comme pour la balise a, img elle a besoin de "src" pour l'affichage de l'image
					$('#fiche_infos').text(oeuvre.infos); // toujours du texte
					$('#map').unbind()
				}
			}
		}
 
		function chargeGeo() // fonction d'affichage de la carte Google Maps avec les points géolocalisé des oeuvres
		{
			$('#map').bind()
				$('#map').gmap( // ce composant est basé sur le plugin jquery.ui.map.js cité dans le <head>
				{
					'disableDefaultUI': 'true', // on désactive les contrôles de Google Maps
					'callback': function() // le callback est la fonction appelé lorsque la carte Google Maps est parfaitement affiché (une fois que.)
					{
						var self = this;
 
						self.addMarker( // on ajoute un Marker pour le repaire (icone rouge de positionnement propre à Google Maps)
						{
							'position': new google.maps.LatLng(00.0000, 0.00000), // on ajoute la latitude, longitude à l'objet Google Maps de l'ESTEN
							'title': 'repair',
							'icon': 'images/repair.png',
							'bounds': false // bounds ici permet de dire à Google Maps de centrer sur notre point, si plusieurs, il ferra en sorte que TOUS soit visible à l'écran en jouant sur la position et le zoom
 
						});
 
 
						$.each(tableau_oeuvres, function(index, item) // pour chaque oeuvre, on récupère l'index (sa position dans l'objet) et l'objet oeuvre lui même (item)
						{
							if (monumentId == item.id)
							{
								self.addMarker( // on ajoute un Marker (icone rouge de positionnement propre à Google Maps)
								{
									'position': new google.maps.LatLng(item.lat, item.lng), // la position est un objet Google Maps appelé LatLng qu'on affecte depuis notre item (objet oeuvre courant)
									'title': item.id,
									'bounds': true // bounds ici permet de dire à Google Maps de centrer sur notre point, si plusieurs, il ferra en sorte que TOUS soit visible à l'écran en jouant sur la position et le zoom
 
 
								});
 
 
							}
						});
						if (ma_lat != '' && ma_lon != '') // si mes informations de géolocalisation ne sont pas vide
						{
							self.addMarker( // on ajoute un Marker (icone rouge de positionnement propre à Google Maps)
							{
								'position': new google.maps.LatLng(ma_lat, ma_lon), // on ajoute notre latitude, longitude à l'objet Google Maps
								'animation': google.maps.Animation.DROP,
								'title': 'Vous êtes ici!',
								'draggable': false,
								'icon': 'images/pin.png',
								'bounds': true // bounds ici permet de dire à Google Maps de centrer sur notre point, si plusieurs, il ferra en sorte que TOUS soit visible à l'écran en jouant sur la position et le zoom
							})
						}
 
					}
				});
 
				carte_charge = false; // on dit que la carte est chargé et ça permet de ne pas repasser dans la création de la carte et la lecture du json à chaque clique sur le bouton
 
			}
 
$.ajax( // on lance un appel ajax pour récupéré notre liste de oeuvres au format xml
            {
                type: 'GET', // en mode GET
                url: 'data/appli.xml', // sur notre fichier XML
                dataType: "xml", // et on informe jQuery que ce qui est reçu est du XML
                complete: function(data, status) // lorsque c'est terminé
                {
                    tableau_oeuvres = []; // on réinitilise notre tableau de oeuvres
                    var carte_charge        = false;
                    $('#map').off();
                    var tours = $.parseXML(data.responseText); // le résutat XML est mis dans notre variable
 
                    $('#liste_POI').html(''); // remise à 0 de la liste (id liste_POI)
                    $(tours).find('oeuvre').each(function (index, item) // on parcours nos noeud "oeuvre" et pour chacun on on ajoute un élément dans la liste contenant image, nom et adresse
                    {
                        tableau_oeuvres.push( // on ajoute dans notre tableau de oeuvre le oeuvre actuellement parcouru
                        {
                            id: $(item).find('id').text(), // l'id
                            nom: $(item).find('name').text(), // le nom
                            lat: $(item).find('lat').text(), // le nom
                            lng: $(item).find('lng').text(), // le nom
                            img: $(item).find('photoUrl').text(), // l'image
                            addr: $(item).find('laddr').text(), // l'adresse
                            infos: $(item).find('infos').text(), // les infos
                            url: $(item).find('actual_url').text(), // l'url
                            tel: $(item).find('phones').text() // le numéro de téléphone
                        });
 
                        var html = '<li style="width:45%; text-align:center; display:inline-block; margin-bottom:5%;">'; // ici, le format de liste est imposé par jQuery Mobile (format avec image)
                        html    += '    <a href="#">';
                        html    += '        <input type="hidden" name="id" value="' + $(item).find('id').text() + '">'; // on ajoute notre ID dans un champ invisible
                        html    += '        <input type="hidden" name="theme" value="' + $(item).find('theme').text() + '">'; // on ajoute notre ID dans un champ invisible
                        html    += '        <img style="border-radius:20px;" src="data/img/' + $(item).find('photoUrl').text() + '">'; // l'image
                        html    += '        <br/><h4>' + $(item).find('name').text() + '</h4>'; // le nom
                        html    += '    </a>';
                        html    += '</li>';
                        $('#liste_POI').append(html); // on ajoute le html généré dans notre liste (ul)
                    });
 
                    $('#liste_POI').find('li[role!="heading"]').each(function (index, item) // on recherche tout nos "li" que nous venons de généré dans notre liste (ul)
                    {
                        $(item).on('click', function (e) // et lorsqu'on clique dessus
                        {
                            e.preventDefault(); // on annule l'action par défaut (<a href="#")
 
                            chargeFiche($(item).find('input[name="id"]').val());
                            window.location.hash = '#fiche'; // et on va sur la page qui n'existe pas (fiche-) qui va appelé l'évènement chargeEvent()
                        });
                    });
 
                    $('.button-liste').on('click', function (e)
                    {
                        liste_theme = $(this).attr('tag');
                    });
 
                    window.location.hash = '#home'; // changement de HASH (et donc, déclanchement de la fonction)
                }
            });
        });
En vous remerciant de m'avoir lu.

J.