"отсутствует] после списка элементов" с помощью eval - PullRequest
1 голос
/ 15 марта 2010

я пытаюсь передать два параметра в функцию, "i" - это значение типа int, а "map" - это объект. Я использую eval, чтобы сообщить Javascript, что я передаю объекты, однако я получаю сообщение об ошибке «отсутствует] после списка элементов».

Я немного новичок в этом, поэтому я не уверен на 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;
}

1 Ответ

3 голосов
/ 15 марта 2010

Если 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], который оценивается и приводит к ошибке.

...