/ / Criando um seletor de variáveis ​​com jQuery? - jquery

Criando um seletor de variáveis ​​com jQuery? - jquery

Deixe-me esclarecer.

Eu tenho um loop gigante que analisa XML, coloca marcadores em um mapa do google de acordo e faz divs ocultos, um por marcador, que contêm informações relacionadas a esse marcador.

O loop também coloca em cada marcador um evento que abre uma janela de informações. A janela de informações contém um botão que deve mostrar o div do marcador em particular.

Mas eu não tenho certeza de como fazer isso. Aqui está a maior parte do código abaixo: omiti as partes anteriores irrelevantes do loop e concentrei-me na área em que estou tentando anexar um evento de clique a cada novo botão.

Mas eu não tenho certeza de como fazer isso. Veja os comentários no código para uma compreensão completa.

$(xml).find("sample").each(function () {

var id = $(this).find("id long").text();

/*there was code here which creates the other variables you see below*/

var infoPage = "<div style="display:none; position:absolute; top:0px; bottom:0px; width:100%;" id="" + id + "Info">" + "<p>Number: " + number + "</p>" + "<p>ID: " + id + "</p>" + "<p>Rock type: " + rockType + "</p>" + "<p>Minerals: " + minerals + "</p>" + "<p>Regions: " + regions + "</p>" + "<p>Latitude: " + latitude + "</p>" + "<p>Longitude: " + longitude + "</p>" + "</div>";

//there was code here which inserts this div into the page

//this line creates the button which appears inside the info window
var contentString = "<a href="" data-role="button" id="" + id + "">" + number + "</a>";

//this line creates the info window
var infowindow = new google.maps.InfoWindow({
content: contentString
});

/*Here is where I hit a problem. I now need to construct a line of jQuery which attaches to this particular button a click event. But it needs to do it for every new button in the loop, so that each button"s click event is unique and opens its personal div. How do I construct a selector which will change with the loop to accomplish the desired result?*/
$("#" + id).click(function () {
$("#" + id + "Info").show();
});

google.maps.event.addListener(marker, "click", function () {
infowindow.open(map, marker);
});

});

Respostas:

1 para resposta № 1

Primeiro, dê a mesma aula para todos os botões

var contentString = "<a href="" class="mybutton" data-role="button" id="" + id + "">" + number + "</a>";

Em segundo lugar, ligue o manipulador de eventos a todos os mybuttons

$(document).on("click", ".mybutton", function() {
$("#" + $(this).attr("id") + "Info").show();
});

UPD: @Felix Kling disse - o importante aqui é que você precisa vinculá-lo uma vez, fora do loop