当TextBox重叠时,前面在ASPX中定义的TextBox是不可点击的

14ifxucb  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(79)

我有很多控制;并且基于条件,它们中的一些变得隐藏而其余的是可见的。为了简化,假设有两个文本框txtNametxtEmail,具有相同的x/y坐标,例如:

<div style="position: absolute; top: 55px; left: 5px; width: 120px; height: 20px">
    <asp:TextBox ID="txtEmail" ClientIDMode="Static" Width="100" runat="server" />
</div>
<div style="position: absolute; top: 55px; left: 5px; width: 120px; height: 20px">
    <asp:TextBox ID="txtName" ClientIDMode="Static" Width="100" runat="server" />
</div>

字符串
有时候,我想隐藏txtEmail。其他时候,我想隐藏txtName。例如,在加载时,我隐藏txtName如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        txtName.Visible = false;    // txtName.Style.Add("display", "none"); same result
        txtName.Enabled = false;
        txtEmail.Visible = true;    // txtEmail.Style.Add("display", "block"); same result
        txtEmail.Enabled = true;
    }
}


现在的问题是文本框不可点击。在ASPX文件中,txtEmail首先出现,然后是txtName。因此,虽然我隐藏了txtName,但它阻止了我在txtEmail上单击鼠标。
如何在不更改asp:TextBox-es顺序的情况下纠正此错误?

r6vfmomb

r6vfmomb1#

好吧,问题和问题是,你隐藏(和显示)的文本框,但2 div的你仍然是可见的,他们是你风点击。
因此,您并不需要禁用文本框控件,只需隐藏(或显示)它们所在的div即可。请注意,当设置style=“display:none”时,通常会产生与SomeControl相同的结果。
不,有一个巨大的区别,因为当你使用代码背后,并设置一个控件visible = false?
该控件不发送,也不呈现客户端。这意味着客户端JavaScript代码不能选择、使用或修改此类控件。
不管上面提到的使用样式隐藏控件和使用样式隐藏控件之间的巨大差异。使用visible = false?
这里的简单方法是隐藏(或显示)您的2个div,这样就可以了。既然你使用了“visible”,那么基于上述,我们不需要启用,也不需要禁用文本框控件。(它们甚至不会被呈现并发送到客户端浏览器)。
将.visible与div一起使用是一种更好的方法,因为当浏览器呈现标记时,实际上没有两个div彼此重叠(因为如上所述,任何具有visible = false的div或控件都不会发送到客户端浏览器)。
标记:

<div id="mydiv1" runat="server" 
            style="position: absolute; top: 55px; left: 5px; width: 120px; height: 20px">
            <asp:TextBox ID="txtEmail" ClientIDMode="Static" Width="100" runat="server" />
        </div>
        <div id="mydiv2" runat="server"  style="position: absolute; top: 55px; left: 5px; width: 120px; height: 20px">
            <asp:TextBox ID="txtName" ClientIDMode="Static" Width="100" runat="server" />
        </div>

字符串
代码隐藏:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            mydiv1.Visible = false;
            mydiv2.Visible = true;
        }
    }


所以,隐藏(或显示)容器。上面的额外好处是你可以在任何一个div中拥有多个控件和标记,因此你的服务器端代码可以通过使用该div控件的.visible属性来显示/隐藏该组控件。
因此,通常用几个命令来隐藏或显示单个控件?将它们分组到一个div中,将runat=“server”标记与“id”标记沿着添加到该div中。
现在,您可以隐藏或显示这组控件,而只需要一行代码。

相关问题