无法设置未定义的 - 以编程方式创建的元素的属性 X
Cannot set property X of undefined - programatically created element
我正在研究一个类来创建相当复杂的自定义元素。我希望能够在创建元素时定义元素属性(主要是 CSS)。我想出了以下函数来快速为我设置输入数组的attrs:
// Sample array structure of apply_settings
//var _button_div = {
// syle : {
// position: 'absolute',
// padding : '2px',
// right : 0,
// top : 0
// }
//};
function __apply_settings(__el,apply_settings){
try{
for(settingKey in apply_settings){
__setting = apply_settings[settingKey];
if(typeof(__setting)=='string'){
__el[settingKey] = __setting;
}else{
for(i in __setting){
__el[settingKey][i] = apply_settings[settingKey][i];
}
}
}
}catch(ex){
alert(ex + " " + __el);
}
}
该函数工作正常,但此处除外:
function __draw_top(){
var containerDiv = document.createElement('div');
var buttonDiv = document.createElement('div');
__apply_settings(containerDiv,this.settings.top_bar);
if(global_settings.show_x)
buttonDiv.appendChild(__create_img(global_settings.images.close));
containerDiv.appendChild(buttonDiv);
__apply_settings(buttonDiv,this.settings.button_div);
return containerDiv;
}
失败的特定部分__apply_settings(buttonDiv,this.settings.button_div);
错误"无法设置未定义的属性'位置'"。所以很自然地,我假设 buttonDiv 是未定义的。我把alert(ex + " " + __el);
放在 __apply_settings() 中来验证我正在使用什么。令人惊讶的是,该元素是一个div。有什么理由为什么这个函数适用于容器Div而不是按钮迪夫?任何帮助将不胜感激:)
{编辑}http://jsfiddle.net/Us8Zw/2/
那是因为你这里有一个错字:
var _button_div = {
syle : { //<--- here
position: 'absolute',
padding : '2px',
right : 0,
top : 0
}
};
如果将其更正为 style
,则工作正常; http://jsfiddle.net/Us8Zw/3/
我还建议你尝试遵循一个众所周知的风格指南(而不是看似自己编造);你的代码目前很难阅读。我推荐的一个是Crockford Style Guide。
相关文章:
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 如何在jQuery中以有效的方式创建链接
- 什么'是在HTML5画布中创建关键事件的最佳方式
- 在jQuery中,创建和附加元素的方式更快
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 在 Google Apps 脚本中,无法以编程方式创建触发器以从 onEdit 触发器发送电子邮件
- 如何在Chrome 41中以编程方式创建TouchEvent
- 创建一个键盘快捷方式来启动Google Chrome扩展
- 创建javascript对象的最佳方式
- 在创建 toLowerCase 函数时,一种方式比另一种方式更好
- Spring MVC与Google图表,创建javascript数据表的最佳方式是什么
- 我如何使用JavaScript(jQuery)在HTML中以传统方式创建元素的副本作为新元素
- 以编程方式创建的“喜欢按钮”会泄漏大量内存
- 使用 jQuery 创建嵌套 HTML 元素的最佳方式
- 在 javascript 中创建函数的不同方式
- 如何在javascript中以编程方式创建新的Google Analytics会话/访问者
- 使用 Node.js 创建反向代理的更优雅的方式
- 为什么$(this)的工作方式不同取决于回调的创建方式
- 更有效的字符串创建方式
- 为什么这样的对象创建方式在Java脚本中被使用