最近、私は理解しようとしているシナリオに出くわしました。すでに回避策があり、仕事は完了していますが、シナリオが実際に発生した理由をまだ理解できていません。問題は厳密にプログラミングに基づいているので、stackoverflow で許可されることを願っています。
ページにDivがありました:
<DIV id="tos3" >
<FONT size=2 face=Arial color=#009a00><B>How to request Business Applications Software </B></FONT>
<BR/><BR/>
<FONT size=2 face=Arial color=#000000>
<select id="segment" onchange="getSecondDropdown(this);"><option value="Segment">Select Segment</option>
<option value="E&P">E&P</option>
<option value="R&M">R&M</option>
<option value="IST">IST</option>
<option value="Functions">Functions</option>
<option value="Other">Other</option>
</select>
<select id="DivisionDP" disabled="disabled" onchange="getDetails();"><option value="Division">Select Division/SPU/Region</option>
</select>
<DIV id="infoDetails"></DIV>
</FONT>
</DIV>
関連する Javascript:
function getSecondDropdown(e)
{
// get the values in seconnd drop down
}
function getDetails()
{
// display details based on selection
}
ページ上では問題なく動作していました。この div をポップアップに表示するリクエストが来ました。マスター ページにポップアップ コードがあり、サイト全体でデータを表示するために使用されています。
<div id="testDiv" style="border-left:2px solid #99cc00;border-right:2px solid #99cc00;border-top:2px solid #4c4c4c;border-bottom:2px solid #4c4c4c;width:500px;display:none;background-color: #eeeeee;z-index:1000;padding:10px 10px 10px 10px">
<div align="right" style="height:25 px;">
<a style="cursor:pointer" onClick="closePouUp()">close</a>
</div>
<div id="contentDiv" style="overflow:auto;"> testDiv content</div>
</div>
<div id="greyout" style="background-color: black; display:none;z-index:400;filter: alpha(opacity=70);opacity: 0.7;width:100%; height:100%;">
</div>
function ShowHideProduct(sValue,flag)
{
var customCopyrightContainer;
customCopyrightContainer = document.getElementById(sValue);
divRef = document.getElementById('testDiv');
innerDiv=document.getElementById('contentDiv');
if(flag==1)
{
innerDiv.style.height = "300px";
}
innerDiv.innerHTML= customCopyrightContainer.innerHTML;
// Get the screen dimensions...
var screenSize = getViewportSize();
var screenWidth = screenSize.width;
var screenHeight = screenSize.height;
// Get the element dimensions...
var elementSize = getElementSize(divRef);
var elementWidth = elementSize.width;
var elementHeight = elementSize.height;
// Calculate the centering positions...
var xPos = (screenWidth - elementWidth) / 2;
var yPos = (screenHeight - elementHeight) / 2;
yPos=document.body.scrollTop/2+yPos;
var body = document.body,
html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight,
html.clientHeight, html.scrollHeight, html.offsetHeight );
//make page greyout
greyOutDiv=document.getElementById('greyout');
greyOutDiv.style.position = 'absolute';
greyOutDiv.style.left = '0px';
greyOutDiv.style.top = '0px';
greyOutDiv.style.width = '1500px';
greyOutDiv.style.height = height + 'px';
greyOutDiv.style.display = 'block';
// Position the element...
divRef.style.position = 'absolute';
divRef.style.left = xPos + 'px';
divRef.style.top = yPos + 'px';
divRef.style.display = 'block';
if(flag==1)
{
divRef.style.height = "300px";
}
return;
}
function closePouUp()
{
divRef = document.getElementById('testDiv');
greyOutDiv=document.getElementById('greyout');
divRef.style.display = 'none';
greyOutDiv.style.display = 'none';
}
同じコードを使用しましたが、機能が機能していませんでした。出力から、javasript innerHTML が一時オブジェクトを作成しているように感じました。最初のドロップダウンが getElementByID メソッドで機能していなかったので、これを感じましたが、メソッドで参照を渡すと機能しました。
これについての適切な説明は得られませんでした。
元の div をポップアップとして表示することで問題を解決しました。だから今、私は正確に何が起こったのかを理解しようとしています。