У меня есть 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");
}