我试图创建一个处理事件监听器服务的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蜻蜓的步入功能时,我无法在init()函数中创建var赋值。
答案 0 :(得分:0)
在执行脚本时,确保页面上有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!");
}
}
})();
答案 1 :(得分:0)
上面的代码是否在之后执行在DOM中存在标识为quoteNum
的元素?
如果不是html_element
将是null
。
因此,请确保所有上述代码都在脚本标记中,该脚本标记位于元素下方文档中的某个位置(或者位于window.onload
jQuery的文档就绪类型事件中)。