2010-04-09 58 views
0

我在ASP.NET 2005中使用JScript。我有一個帶有複選框和下拉列表的頁面。當複選框被選中時,下拉將被禁用。在頁面回發期間,應保留此行爲。我正在使用如下功能的javascript函數:Javascript禁用ASP.NET中的下拉列表

if((chkOwner[1].checked==true)) 
{ 

    document.getElementById(ddlClientID).disabled=true; 

    document.getElementById(ddlClientID).className = "form-disabled"; 

    document.getElementById(ddlClientID).selectedIndex = 0; 
} 

    else 
{ 

     document.getElementById(ddlClientID).disabled=false; 

     document.getElementById(ddlClientID).className = "form-input"; 

     document.getElementById(ddlClientID).selectedIndex = 0; 
} 

這個效果差不多。但是,回發後不會保留下拉選擇(未選中複選框時)。 [它轉到零指數的值]

解決方案實際上是刪除最後一行,即在else部分中,刪除selectedIndex = 0。

但是,當我這樣做時,禁用下拉式(選中複選框時)在回發後無法使用。

你能幫我解決嗎?

更多信息:我正在使用ClientScript.RegisterStartupScript在每次頁面加載時檢查此內容。

感謝

Lijo

--CODE ----- 下面是什麼,我想。 (這是我創建剛纔一個示例應用程序,這是行不通的。這隻能說明什麼,我想要的目的。)

function ManageInputsFor() 
{ 
     if((document.getElementById(chbx).checked==true)) 
     { 
      document.getElementById(ddlClientID).disabled=true; 
      document.getElementById(ddlClientID).className = "form-disabled"; 
      document.getElementById(ddlClientID).selectedIndex = 0; 
     } 
     else 
     { 
      document.getElementById(ddlClientID).disabled=false; 
      document.getElementById(ddlClientID).className = "form-input"; 
      document.getElementById(ddlClientID).selectedIndex = 0; 
     } 
} 

protected void Page_Load(object sender, EventArgs e) 
    { 
     ClientScript.RegisterClientScriptBlock(Page.GetType(), "chbx", @"<script language=""javascript"" type=""text/javascript"">var chbx ='" + CheckBox1.ClientID + "'</script>"); 
     ClientScript.RegisterClientScriptBlock(Page.GetType(), "ddl", @"<script language=""javascript"" type=""text/javascript"">var ddlClientID ='" + DropDownList1.ClientID + "'</script>"); 
     ClientScript.RegisterStartupScript(Page.GetType(), "onLoadCallForManageInputs", @"<script language=""javascript"" type=""text/javascript"">ManageInputsFor();</script>"); 

     CheckBox1.Attributes.Add("onclick", "ManageInputsFor();"); 

    } 
+0

Mhhh,我幾乎擁有它..但是你說的部分「實際上,解決方案是刪除最後一行,即在else部分中,刪除selectedIndex = 0。這不應該是真的。你可以將代碼粘貼到你使用這個JS函數的地方嗎? – 2010-04-09 19:01:09

+0

喜Claudio, 請參閱上面更新的問題。 – Lijo 2010-04-09 19:48:47

回答

0

你必須在做的複選框的服務器端評測回顧,並設置啓用或不啓用下拉列表。下拉列表的禁用屬性在post操作過程中不會發送到服務器(當它被禁用時,它也不是控件的值,btw)。

編輯:要將值留在回發中的下拉列表中,可以將所選值複製到另一個將回發的控件,然後在服務器處理期間將值分配回下拉列表中。

+0

感謝您的回覆。但它不符合我的要求。我需要禁用客戶端本身的下拉菜單。它必須在第一次回發之前被禁用。 – Lijo 2010-04-09 19:16:15

0

基本上,當您使用JavaScript更改ASP控件的狀態時,您的問題正在發生bc,該stat不會回發到服務器。你必須找出一種方法來發送它。使用隱藏控件,或向查詢字符串添加參數是兩種這樣的方法。

+0

讓我再解釋一下背景。我在頁面加載之前也調用了javascript函數。因此我認爲,沒有必要爲服務器傳遞價值。 [我將編輯關於此的原始帖子] – Lijo 2010-04-09 19:20:58