2011-01-25 48 views
1

我有5-6組合框AJAX控件工具包的過濾器面板..組合框ajaxcontrol

我想這個過濾器面板可見默認爲false ..和撥動它(顯示/隱藏)客戶端單擊使用Java腳本

然而,當我有我的過濾器面板可見=假RUNAT =服務器Java腳本不獲取對象

,如果我做後面的代碼.. filterpanel.attributes.add(「風格」 ,display:none) filterpanel.attributes.add(「style」,visibilty:hidden)

組合框會引發運行時錯誤..

我在網上搜索過說..組合框很難在面板內呈現..其默認屬性最初爲false!

+0

組合框是一個Ajax控制工具套件..運行時錯誤我得到的是無效的參數..默認可視屬性的面板=假 – prateek 2011-01-25 12:35:04

回答

1

問題是<select>元素必須是rendered(但不一定是visible)才能可靠地訪問其維度屬性。

所以display: none;不會起作用,因爲該元素不會呈現,並且visibility: hidden;將部分工作,因爲元素呈現,所以空間分配給他們的網頁上,但隱藏的,使空間將保持爲空。

第三個解決方案是使容器像往常一樣,但要絕對positioned外的瀏覽器窗口中:

filterPanel.Attributes.Add("style", 
    "position: fixed; left: -10000px; top: -10000px;"); 

這樣一來,面板和它的內容是不可見的,但大小<select>元素將被正確計算。

在客戶端,以顯示面板的公式變爲:

document.getElementById("filterPanelClientID").style.position = "static"; 

而再次把它隱藏:

document.getElementById("filterPanelClientID").style.position = "fixed"; 

您可以測試一個基於jQuery的實現here

0

問題是,如果您在服務器控件上設置Visible =「false」,它將不會呈現任何HTML元素,包括組合框。隱藏使用下面的面板是AJAX友好:

<asp:Panel id="p" runat="server" style="display:none"> 

</asp:Panel> 

這會使一個DIV和所有的下拉菜單,但其隱藏起來,讓您切換div的可見性。

+0

嘿..我試過..做這個..但仍然是相同的錯誤發生..一旦頁面加載..組合框下拉拋出腳本資源動態創建的文件中的運行時錯誤style.width = bestwidth + px其中最佳寬度= -2 – prateek 2011-01-25 12:43:02

0

,切勿使用「顯示:無」到面板上,只有「可見性:隱藏」:

filterpanel.Attributes.Add("style", "visibilty: hidden"); 

這將隱藏面板(該<div>我想),但保留所需的空間(和因此將允許相應DOM元素的維度相關屬性具有正確的值)。

當然你會看到一個空白點,但你可以通過玩一個元素的樣式來解決這個問題(也許通過將面板嵌套到另一個元素中,並通過將樣式應用到該元素而不是在面板本身)。

+0

哪些元素應該放置面板以隱藏??。 。和應用風格?..我採取另一個面板?..不會有同樣的效果? – prateek 2011-01-25 13:36:17

+0

@prateek:首先,在包含組合框的面板上試試我的解決方案。如果它有幫助,那麼在面板周圍包裹一個DIV元素,並通過將「height」和「line-height」CSS屬性設置爲「0px」使其不可見(也可能需要應用「overflow:hidden」)。測試它。如果它沒有拋出錯誤,則更改顯示面板的邏輯,以便它也可以從父DIV中刪除這些CSS樣式(否則,因爲父DIV被縮小,您將看不到面板)。 – volpav 2011-01-25 13:54:20