我已经完成了一个代码,用于在用户点击控件时禁用控件。在我的表单上,我有TextBox
和DropDown
。当用户点击TextBox
我将disable
点击DropDown
DropDown
时,我会停用正常的TextBox
。
但是当用户点击Disabled
控件时,我想启用该控件。意味着如果我点击已被禁用的TextBox
我想Enable
就像dropdown
那样......
我的示例脚本如下
<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>
答案 0 :(得分:4)
显然,Firefox和其他浏览器可以禁用已禁用的表单字段上的DOM事件,并且在禁用的表单字段中启动的任何事件都将被完全取消,并且不会在DOM树中向上传播。
所以,如果你想要实现这样的目标,你可能不得不采取一种解决方法。
而不是实际禁用该字段尝试将字段设置为看起来好像被禁用,这样您仍然可以捕获click事件。
答案 1 :(得分:2)
我的想法是在下拉列表前放置一个div,此div接受onclick事件。
这里的问题是div不能在下拉列表前放置这么简单。要放置它,你需要动态地使用absolut位置。
我在这里制作了一个小代码,并对其进行测试和工作。我已经在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>
答案 2 :(得分: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>