要素(パネル)を見つけて位置を取得し、ページをその位置にスクロールするjavascriptがあります。ボタンのクリック時に JavaScript 関数が呼び出されます。パネルが Visible=true の場合、すべて正常に動作します。ただし、ページの読み込み時には、パネルがユーザーに表示されないようにする必要があります。パネルが Visible = false の場合、ページにパネルが存在しないため、javascript 関数は機能しません。パネルが style="display:none" の場合、存在し、ユーザーには表示されませんが、その位置は実際の位置ではありません。パネルが style="visibility:hidden" の場合、パネルは存在し、実際の位置にありますが、パネルが隠されているページに大きな空白があります。
ページに空白スペースがないとパネルがユーザーに見えないようにし、ページ上の実際の位置を取得するにはどうすればよいですか?
編集: 私のソリューション + コード -
まあ、私はそれを機能させましたが、より良い解決策があるはずです。ここにコードがあります
<script type="text/javascript">
function elementPosition(obj) {
var curleft = 0, curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft;
curtop = obj.offsetTop;
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
}
}
return { x: curleft, y: curtop };
}
function ScrollToControl(id) {
jid = id;
var elem = document.getElementById(jid);
//here I set the display = 'block', and I also set this in button_click event
//when I didn't set it also in button_click event, I get the right panel position
//but the panel remains invisible
elem.style.display= 'block';
var scrollPos = elementPosition(elem).y;
window.scroll(0, scrollPos);
}
</script>
ページ上のボタン:
<asp:Button ID="btnClientDossiers_EMAIL" runat="server" CssClass="button" Enabled="False"
Text="EMAIL" OnClick="btnClientDossiers_EMAIL_Click" />
コードビハインド
Page_Load
{
//how can I dynamically get the ctl00_ContentPlaceHolder?
// Or will the client name of plEMAIL always start with ctl00_ContentPlaceHolder?
btnClientDossiers_EMAIL.Attributes.Add("onclick", " return
ScrollToControl('ctl00_ContentPlaceHolder_plEMAIL');");
}
protected void btnClientDossiers_EMAIL_Click(object sender, EventArgs e)
{
plEMAIL.Attributes.Add("style", "display:block");
}