Tengo un mapa de los EE. UU. Con los 50 estados como botones en los que se puede hacer clic, cuando el usuario hace clic en un estado en el que deseo mostrar información sobre ese estado, llamando dinámicamente a la matriz de ese estado. A continuación se muestra mi propio intento débil que obviamente no funciona.

var stateList = new Array("AK","AL","AR","AZ","CA","CO","CT","DC","DC2","DE","FL","GA","GU","HI","IA","ID",
        "IL","IN","KS","KY","LA","MA","MD","ME","MH","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY",
        "OH","OK","OR","PA","PR","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY");

function listenerForI( i ) {
    document.getElementById(stateList[i])
    .addEventListener('mousedown', function() {
        stateSelect(stateList[i]);
    }, false);
}

for (var i = 0; i < stateList.length; i++) {
   listenerForI( i );
}

var HIdat = new Array(20,28,50,2) //one array for all 50 states COdat, AKdat, etc.

function stateSelect(state){
    var display_data1 = state + "dat[0]";
    alert(display_data1);
}

¿Debo usar eval ()? He oído hablar de algo que puede hacer con una "ventana []" global, pero no entiendo cómo funcionaría.

3
Stephen 23 jun. 2011 a las 05:57

3 respuestas

La mejor respuesta

Debe almacenar las matrices de estado en su propio objeto:

var stateData = {
    HI: [1, 2, 3],
    IL: [4, 5, 6],
    ...
};

var myData = stateData[state];
6
SLaks 23 jun. 2011 a las 02:00

Usar window es una opción, como esta:

window[state + "dat"] te dará la matriz.

Pero sugeriría ... exactamente lo que SLaks acaba de publicar, así que hazlo en su lugar.

0
SLaks 23 jun. 2011 a las 02:04

En JavaScript, los vars globales son miembros del objeto de ventana, por lo que puede usar la sintaxis de indexación de matriz para obtenerlos sin usar eval, que generalmente se debe evitar, de esta manera:

function stateSelect(state) {
    var display_data1 = window[state + "dat"];
    alert(display_data1);
}
0
FishBasketGordo 23 jun. 2011 a las 02:05