我正在尝试创建一个处理事件监听器服务的 Singleton 对象:
var ChildParent = (function () {
var html_element = document.getElementById("quoteNum");
var row_number = 0;
return {
init: function(){
html_element["parenttype"+row_number].addEventListener("click", ChildParent.fire, false);
},
add: function(total) { //Adding a row
},
fire: function() {
alert("it fired!");
}
}
})();
但是,当我调用 ChildParent.init() 时,文档元素不会分配给 html_element,因此我无法附加监听器。奇怪的是,row_number 变量被初始化为零。是否存在某种我不理解的范围冲突?当我使用 Opera 的 Dragonfly 的 step-into 功能时,我无法在 init() 函数中创建 var 赋值。
最佳答案
确保在执行脚本时页面上有 id 为“quoteNum”的元素。
您可能会在没有等待呈现所有页面元素的情况下执行脚本。
您可能会考虑处理 window.onload .
更新
以下更改可以帮助您解决在呈现页面之前初始化 html_element 的问题。
var ChildParent = (function () {
function getElement(){
return html_element ? html_element : html_element = document.getElementById("quoteNum");
}
var html_element;
var row_number = 0;
return {
init: function(){
getElement()["parenttype"+row_number].addEventListener("click", ChildParent.fire, false);
},
add: function(total) { //Adding a row
},
fire: function() {
alert("it fired!");
}
}
})();
关于Javascript Singleton 设计模式和闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437930/