No se puede establecer la propiedad X de undefined - elemento creado programáticamente [cerrado]

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/

preguntado el 12 de junio de 12 a las 11:06

¿Por qué no puedes usar css({...}) ? ".css(mapa) mapa Un mapa de pares propiedad-valor para establecer". -

jsFiddle por favor :) -

@gdoron no menciona jQuery aquí -

@WickyNilliams. ohhh, entonces ¿Por qué no puedes usar jQuery...? :) -

En lugar de los dos subrayados, personalmente prefiero cinco signos de dólar. -

1 Respuestas

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 or haz tu propia pregunta.