2012-01-11 24 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