2012-06-12 27 views
0

我正在創建一個相當複雜的自定義元素的類。我希望能夠在創建元素時定義元素屬性(主要是CSS)。我用下面的功能來快速設置ATTRS過來爲我給出一個輸入數組:無法設置屬性X的undefined - 以編程方式創建的元素

// 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。有沒有任何理由爲什麼這個函數將爲containerDiv而不是buttonDiv工作?任何幫助將不勝感激:)

{編輯} http://jsfiddle.net/Us8Zw/2/

+0

爲什麼你不能使用'css({...})'? _「.css(地圖) map要設置的屬性值對的地圖。」_ – gdoron

+0

[jsfiddle](http://jsfiddle.net)請:) – WickyNilliams

+1

@gdoron這裏沒有提及jQuery – WickyNilliams

回答

1

這是因爲你在這裏有一個錯字:

var _button_div = { 
    syle : { //<--- here 
     position: 'absolute', 
     padding : '2px', 
     right : 0, 
     top  : 0 
    } 
}; 

如果你把它修正爲style,它工作正常; http://jsfiddle.net/Us8Zw/3/

我還建議你嘗試遵循一個衆所周知的風格指南(而不是看似自己編造);你的代碼目前很難閱讀。我建議的一個是Crockford Style Guide

+0

哇......你知道當你在桌子上打敗你的頭時,你一直在看代碼的時間太長了,太難以置信了!我相信現在是休息時間了,感謝您的協助/拼寫檢查:P –

+0

有一個[清除堆棧溢出的活動](http://meta.stackexchange.com/q/167342)相關的問題 - 我們真的可以用你的幫助!你可以通過在這個問題上進行近距離投票來介入一點嗎? – bfavaretto

+0

@bfavaretto:顯然當我問起這個問題時(現在已經變老了),我不能再投一次近距離投票:(。 – Matt

相關問題