元素列表“缺少”与eval

时间:2010-03-14 21:35:05

标签: javascript eval

我试图将两个参数传递给一个函数,“i”是一个int值,“map”是一个对象。我正在使用eval通知Javascript我正在传递对象,但是我在元素列表之后得到错误“缺失”。

我对此有点新意,所以我不能百分百确定这是否是正确的做事方式......但是你希望我能走上正轨。

...

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;
}

1 个答案:

答案 0 :(得分: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]正在评估并导致错误。