2010-03-14 49 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

相關問題