2010-03-14 5 views
1

en essayant de passer deux paramètres à une fonction, "i" étant une valeur int et "map" étant un objet. J'utilise eval pour informer Javascript que je passe des objets, mais je reçois l'erreur "missing" après la liste des éléments ". Je suis un peu nouveau à ceci donc je ne suis pas sûr à 100% si c'est la bonne manière de faire des choses ... mais ya .. j'espère que je suis sur la bonne voie."missing] après la liste des éléments" avec eval

... 

optionsControlDiv.innerHTML += '<input type="checkbox" onclick="toggleLayer('+eval(i)+","+eval(map)+')"'+c+' />'+this.opts[i]+'<br>'; 
console.log('<input type="checkbox" onclick="toggleLayer('+eval(i)+","+eval(map)+')"'+c+' />'+this.opts[i]+'<br>'); 
// OUTPUT: 
    // <input type="checkbox" onclick="toggleLayer(0,[object Object])" />Wiki<br> 
    // <input type="checkbox" onclick="toggleLayer(1,[object Object])" />webcams<br> 
    // <input type="checkbox" onclick="toggleLayer(2,[object Object])" />Photos<br> 

// ERROR: 
    // missing ] after element list 
    // [Break on this error] toggleLayer(0,[object Object]) 

... 

// The function 
function toggleLayer(i,map) { 
    //console.log(i); 
    if (layers[i].Visible) { 
     layers[i].hide(); 
    } else { 
     if(layers[i].Added) { 
      layers[i].show(); 
     } else { 
      map.addOverlay(layers[i]); 
      layers[i].Added = true; 
     } 
    } 
    layers[i].Visible = !layers[i].Visible; 
} 
+0

Pourquoi avez-vous besoin d'évaluer 'i' et' map' et quelles sont ces valeurs? – Gumbo

+0

n'utilisez pas eval et ne collez pas les représentations sous forme de chaîne des gestionnaires d'événements DOM-0, vous éviterez tout effort de débogage. –

+0

bien ... alors quelle est la meilleure façon de passer les arguments dans une chaîne alors? Ou devrais-je trouver une autre façon de le faire? – cdnicoll

Répondre

3

Si map est variable globale cela devrait fonctionner sans utiliser eval:

optionsControlDiv.innerHTML += '<input type="checkbox" onclick="toggleLayer('+i+',map)"'+c+' />'+this.opts[i]+'<br>'; 
console.log('<input type="checkbox" onclick="toggleLayer('+i+',map)"'+c+' />'+this.opts[i]+'<br>'); 

Vous avez une erreur, car eval chaîne en tant que paramètre attend, et map objet alors appelé retourne la chaîne [object Object] qui est étant évalué et entraîne une erreur.

+0

Merci, cela a fait l'affaire. – cdnicoll

Questions connexes