2016-09-15 3 views
0

私は古いコードをリファクタリングしていますが、タイプエラーの解決策を見つけることができません(私はevalの使用は怒鳴りますが、私の場合は必要ありませんセキュリティのため)。動的HTMLコードからヌルのプロパティ 'style'を読み取ることができません

から呼び出され
<div id="ansyskeys" style="display:none"> 
    <select id="anotherkey" size="5" onchange="selectOther('anotherkey')"></select> 
</div> 

は(ベンダーが名を保持している:私は動的にするリファクタリングしようとしていますことを静的だった

var Ansys = {key:'ansyskeys', loaded:0, display: "none", otherkey: 'anotherkey'}; 
var Cadence = {key:"cdskeys", loaded:0, display: "none", otherkey: 'cotherkey'}; 

私が持っていた以前のHTMLコード:

は、私のようなオブジェクトを持っています私のオブジェクトの私は欲しい):

document.getElementById(eval(vendor).key).style.display = eval(vendor).display; 

私は何かのような私のオブジェクトに何か別のものを表示する)

<div id="eval(vendor).key" style="display:none"> 
    <select id="eval(vendor).otherkey" size="5" onchange="selectOther(eval(vendor).otherkey)"></select> 
</div> 

何か助けに感謝します。

+1

をなぜあなたは(evalを必要とします)、すべての? Evalは文字列を入力として受け取りますが、すでにオブジェクトを扱っています。 –

+0

evalは文字列名をリテラルに変換しているので、vendor.keyとundefinedが返される代わりにeval(vendor).keyがAnsys.keyと同じように動作します – CDaly

答えて

1

vendorはあなたが必要なオブジェクト保持している場合:

var key = vendor.key; 
var otherkey = vendor.otherkey; 
var myDiv = document.createElement('div'); 

var html = '<select id="' + otherkey + '" size="5" onchange="selectOther('+ otherkey + ')"></select>'; 

myDiv.innerHTML = html; 
myDiv.id = key; 
document.body.appendChild(myDiv); 
関連する問題