2010-03-14 45 views
1

即时尝试将两个参数传递给函数,”i“是一个int值,”map“是一个对象。我使用eval来通知Javascript,我正在传递对象,但是在元素列表后面出现错误“缺失”。“missing”after element list“with eval

我对此很有点新意,所以我并不是100%确定这是否是正确的做事方式......但是雅..希望我在正确的轨道上。

... 

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

为什么你需要评估'我'和'地图',他们是什么值? – Gumbo 2010-03-14 21:37:48

+0

不使用eval,也不会使用DOM-0事件处理程序的字符串表示形式,您可以免除大家的相当一部分调试工作。 – 2010-03-14 21:40:03

+0

好吧......那么在字符串中传递参数的最好方法是什么呢? 或者我应该去寻找另一种方式来做到这一点? – cdnicoll 2010-03-14 21:42:02

回答

3

如果map是全局变量这应该不使用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>'); 

因为eval预计字符串作为参数,你有一个错误,并且map对象,而被称为字符串返回[object Object]这是被评估并导致错误。

+0

谢谢你,这个伎俩。 – cdnicoll 2010-03-14 22:01:38

相关问题