概述:
最近由於快速開發用了微軟的ajaxcontroltoolkit,實現點擊添加然後彈出一個搜尋方塊去選擇添加資料的功能
但是由於頁面比較長並且彈出框是置中顯示的,所以很多時候不是在螢幕中間顯示的,這就需要在頁面中設定彈出框的位置
解決方案:
首先我試著用document.getElementById().style.top去設定他的垂直位置,但是如果你的彈出框中有伺服器按鈕,比如搜尋,即使你在彈出框中放了updatepanel,在資料回傳載入後彈出框口的位置會自動回到整個頁面的中間,可能是因為我們只是用js去設定的彈出框口的位置,但是伺服器並不知道,所以在載入後又重新設定的快顯視窗的位置.
最後我看了下快顯視窗的js代碼,如下:Code
<script type="text/javascript">
$addHandler($get("lnkLuRulesShowSearch"), 'click', LuRules_showModalPopupViaClient);
$addHandler($get("lnkLuRulesReturn"), 'click', LuRules_hideModalPopupViaClient);
function LuRules_showModalPopupViaClient(ev) {
ev.preventDefault();
var modalPopupBehavior = $find('LuRules_programmaticModalPopupBehavior');
modalPopupBehavior.show();
}
function LuRules_hideModalPopupViaClient(ev) {
ev.preventDefault();
var modalPopupBehavior = $find('LuRules_programmaticModalPopupBehavior');
modalPopupBehavior.hide();
}
</script>
我們看到他快顯視窗是modalPopupBehavior.show();這樣來彈出來的,所以我們可以加一個debugger然後可以看到modalPopupBehavior有一個set_Y的方法:
modalPopupBehavior.set_Y(getElementPos("lnkLuRulesShowSearch").y);
getElementPos是一個輔助js方法用來擷取lnkLuRulesShowSearch這個按鈕的位置的,最終代碼如下:Code
<script type="text/javascript">
// Add click handlers for buttons to show and hide modal popup on pageLoad
$addHandler($get("lnkLuRulesShowSearch"), 'click', LuRules_showModalPopupViaClient);
$addHandler($get("lnkLuRulesReturn"), 'click', LuRules_hideModalPopupViaClient);
function LuRules_showModalPopupViaClient(ev) {
ev.preventDefault();
var modalPopupBehavior = $find('LuRules_programmaticModalPopupBehavior');
modalPopupBehavior.set_Y(getElementPos("lnkLuRulesShowSearch").y);
modalPopupBehavior.show();
}
function LuRules_hideModalPopupViaClient(ev) {
ev.preventDefault();
var modalPopupBehavior = $find('LuRules_programmaticModalPopupBehavior');
modalPopupBehavior.hide();
}
</script>
這樣彈出的視窗即使頁面回傳也不會改變彈出的位置
希望對遇到同樣問題的朋友有所協助:)