No se puede establecer la propiedad X de undefined - elemento creado programáticamente [cerrado]
Frecuentes
Visto 911 veces
0
Estoy trabajando en una clase para crear un elemento personalizado bastante complejo. Quiero poder definir los atributos de los elementos (principalmente CSS) mientras estoy creando los elementos. Se me ocurrió la siguiente función para configurar rápidamente atributos para mí dada una matriz de entrada:
// 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);
}
}
La función funciona bien excepto aquí:
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;
}
La sección específica que está fallando es __apply_settings(buttonDiv,this.settings.button_div);
con el error "No se puede establecer la propiedad 'posición' de indefinido". Entonces, naturalmente, asumo que buttonDiv no está definido ... Puse alert(ex + " " + __el);
en __apply_settings() para verificar con qué estaba trabajando. Sorprendentemente, el elemento es un div. ¿Hay alguna razón por la que esta función funcionaría para containerDiv y no para buttonDiv? Cualquier ayuda sería muy apreciada :)
{EDITAR} http://jsfiddle.net/Us8Zw/2/
1 Respuestas
1
Eso es porque tienes un error tipográfico aquí:
var _button_div = {
syle : { //<--- here
position: 'absolute',
padding : '2px',
right : 0,
top : 0
}
};
Si lo corriges a style
, funciona bien; http://jsfiddle.net/Us8Zw/3/
También te aconsejo que pruebes y sigas una guía de estilo bien conocida (en lugar de inventarte la tuya propia); su código es bastante difícil de leer en este momento. Uno que recomiendo es el Guía de estilo de Crockford.
Respondido el 12 de junio de 12 a las 11:06
Wow... sabes cuando has estado mirando el código durante demasiado tiempo cuando te golpeas la cabeza contra una mesa por algo tan increíblemente simple. Creo que es hora de un descanso, gracias por su ayuda/revisión ortográfica :P - david lasley
Hay una campaña para limpiar Stack Overflow eliminando estas preguntas relacionadas con errores tipográficos, ¡nos vendría muy bien tu ayuda! ¿Le importaría colaborar un poco con un voto cercano a esta pregunta? - bfavaretto
@bfavaretto: Aparentemente, agregué a VtC cuando se hizo la pregunta (que ahora ha pasado), y no puedo emitir otro voto cerrado :(. - Matt
Gracias por los comentarios Mat. Si quieres ayudar a aclarar otras dudas similares, visita la sala de cierre. - bfavaretto
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript or haz tu propia pregunta.
¿Por qué no puedes usar
css({...})
? ".css(mapa) mapa Un mapa de pares propiedad-valor para establecer". - gdoron is supporting MonicajsFiddle por favor :) - WickyNilliams
@gdoron no menciona jQuery aquí - WickyNilliams
@WickyNilliams. ohhh, entonces ¿Por qué no puedes usar jQuery...?
:)
- gdoron is supporting MonicaEn lugar de los dos subrayados, personalmente prefiero cinco signos de dólar. - user663031