То, как вы делаете это сейчас, является формой eval
и, как правило, осуждается.Прочтите Ненавязчивый Javascript , если вы хотите знать все причины.
Однако, есть действительно превосходный способ выполнить ту же задачу безпроблемы с областью видимости (не говоря уже о попытке передать этот объект в функцию в строковой форме - да!
function createMyInfoWindow(o){
// creating window first so we can access it from the DOM
createInfoWindow(info_html);
// we can select the window from the DOM now, but it would be even better if
// createInfoWindow returned that object so we could just pick up where we left off
var myInfoWindow = document.getElementById("myInfoWindow");
// The button you are putting into the window
var myButton = document.createElement("input");
myButton.type = "button";
myButton.value = "click me";
// because of javascript closures, we can call foo(o) from within an anonymous function
myButton.onclick = function () { foo(o) };
}
Я предпочитаю создавать элементы HTML таким способом по многим причинам: 1) Избегайте неявного использования eval
, 2) намного проще отлаживать HTML, когда он генерируется для вас javascript и 3) больше нет проблем с областью действия для функций событий.
Вам просто нужно создать окно в обратном порядке сейчас, потому что элемент окна должен существовать первым, чтобы добавить к нему кнопку, и элемент кнопки должен существоватьпрежде чем вы сможете добавить обработчик onclick
к нему.