2012-01-11 25 views
5

我已經做了一個代碼來禁用控件時,用戶點擊一個控件。在我的表格上,我有一個TextBox和一個DropDown。當用戶點擊一個TextBox我將disableDropDown就像那樣當點擊DropDown我會禁用TextBox它工作正常。我怎樣才能使一個禁用控制回到使用Javascript

但是,當用戶點擊Disabled控制我想啓用該控件。也就是說,如果我在其上禁用我想Enable這樣說,這對dropdownTextBox點擊..

我的示例腳本如下

<script type="text/javascript"> 

function toggleDropDownList1() 
{ 
var d=document.getElementById("<%= DropDownList4.ClientID %>"); 
if(d.disabled) 
{ 
d.disabled=false; 
} 
else 
{ 
document.getElementById("<%= TextBox1.ClientID %>").disabled = true; 
} 
} 
function toggleDropDownList2() 
{ 
document.getElementById("<%= DropDownList4.ClientID %>").disabled = true; 
} 
</script> 

設計

<asp:TextBox ID="TextBox1" runat="server" onclick="toggleDropDownList2();"></asp:TextBox> 
     <asp:DropDownList ID="DropDownList4" runat="server" onclick="toggleDropDownList1();"> 
      <asp:ListItem Text="One" Value="1"></asp:ListItem> 
      <asp:ListItem Text="One" Value="1"></asp:ListItem> 
     </asp:DropDownList> 
+1

是否要通過單擊禁用的控件來啓用禁用的控件?我認爲onclick事件不會禁用禁用控件? – T23 2012-01-11 12:06:25

+0

是啊,我需要 – Dotnet 2012-01-11 12:07:13

+0

與一個div扭曲它,並獲得div的onlick使它回來。 – Aristos 2012-01-11 12:16:29

回答

2

想法是在下拉列表前面放置一個div,並且該div接受onclick事件

這裏的問題是div不能放在下拉列表的前面。要放置它,你需要動態地使用絕對位置。

我在這裏做一個小代碼,並測試它並工作。我在div上留下了背景顏色RED以查看它在哪裏。一些細節我把它留給你,例如找到你的控制列表的寬度和高度,我放置onclick,你可以放回雙擊,然後刪除紅色背景。

<script type="text/javascript"> 
function toggleDropDownList1() 
{ 
    var MyDiv = document.getElementById("DivForClick"); 
    MyDiv.style.display = "none"; 

    var d=document.getElementById("<%= DropDownList4.ClientID %>"); 
    if(d.disabled) 
    { 
     d.disabled=false; 
    } 
    else 
    { 
     document.getElementById("<%= TextBox1.ClientID %>").disabled = true; 
    } 
} 

function toggleDropDownList2() 
{ 
    document.getElementById("<%= DropDownList4.ClientID %>").disabled = true; 

    var MyDdl = document.getElementById("<%= DropDownList4.ClientID %>"); 
    var MyDiv = document.getElementById("DivForClick"); 

    MyDiv.style.display = "block"; 
    MyDiv.style.left = MyDdl.style.left; 
    MyDiv.style.top = MyDdl.style.top; 

    // need to find the height/width 
    // MyDiv.style.height = MyDdl.style.height; 
    // MyDiv.style.width = MyDdl.style.width; 
} 
</script> 

和asp代碼。

<asp:TextBox ID="TextBox1" runat="server" onclick="toggleDropDownList2();"></asp:TextBox> 

<br /><br /> 

<div id="DivForClick" onclick="toggleDropDownList1();" style="z-index:999;position:absolute;left:0;top:0;height:20px;width:40px;background-color:Red;display:none;"> 
</div> 

<asp:DropDownList ID="DropDownList4" runat="server" onclick="toggleDropDownList1();" style="z-index:2;"> 
    <asp:ListItem Text="One" Value="1"></asp:ListItem> 
    <asp:ListItem Text="Two" Value="2"></asp:ListItem> 
</asp:DropDownList> 
+0

但點擊'textbox'後沒有再次啓用 – Dotnet 2012-01-11 13:01:43

+2

@用戶I只適用於下拉列表框 - 最難的一個,但你明白了,你可以爲其餘的或者你的所有元素修復它......我給你這個想法,我也給你一些你問的代碼!但不要求爲你工作。 – Aristos 2012-01-11 13:04:32

+0

'Aristos'你能否檢查一下我的帖子 – Dotnet 2012-01-11 13:27:43

0

你的意思

function toggleIt() { 
    var d=document.getElementById("<%= DropDownList4.ClientID %>"); 
    var t =document.getElementById("<%= TextBox1.ClientID %>"); 
    d.disabled=!d.disabled 
    t.disabled=!t.disabled 
} 

<asp:TextBox ID="TextBox1" runat="server" onclick="toggleIt();"></asp:TextBox> 
    <asp:DropDownList ID="DropDownList4" runat="server" disabled="disabled" onclick="toggleIt();"> 
     <asp:ListItem Text="One" Value="1"></asp:ListItem> 
     <asp:ListItem Text="One" Value="1"></asp:ListItem> 
    </asp:DropDownList> 
+0

這沒有按照我的要求工作 – Dotnet 2012-01-11 12:01:27

+1

當點擊'Dropdown'我可以'再次'啓用 – Dotnet 2012-01-11 12:03:42

4

顯然Firefox和pe也可能是其他瀏覽器,禁用禁用的表單字段上的DOM事件,並且在禁用的表單字段中開始的任何事件都會完全取消,並且不會向上傳播DOM樹。

因此,如果您想要實現這樣的目標,您可能需要採取一種解決方法。

而不是實際禁用該字段嘗試設置樣式字段看起來就像他們被禁用,這樣你仍然可以捕獲點擊事件。

+0

您可能還需要一個隱藏的字段標記被禁用,以便服務器端知道。我認爲這可能是一種很好的方法,但禁用的元素不會將其值發佈到服務器,而使用它,他們將開始這樣做... – Chris 2012-01-11 13:28:53