【问题标题】:why does textbox.disabled= true clears the text of the textbox?为什么 textbox.disabled=true 会清除文本框的文本?
【发布时间】:2017-10-19 20:37:57
【问题描述】:

我的代码中有一些 asp:Textbox 元素,在用户单击验证后我使用 javascript 禁用了这些元素。

例如:

 <asp:TextBox CssClass="dateClass" ID="fromDateE" width="100px" runat="server" Text=""></asp:TextBox>

我的 javascript 函数是:

function disableDateFields()
{
    var dates = document.getElementsByClassName("dateClass");
    for (var i = 0; i < dates.length; i++) 
    {
        //console.log(dates[i]);
        dates[i].disabled = true;
    }
}

我遇到的问题是提交后我在文本框中的值被清除了。

为了解决这个问题,我更改了 JS 函数,所以我没有禁用,而是将文本框的 readOnly 属性设置为 true:

function disableDateFields()
{
    var dates = document.getElementsByClassName("dateClass");

    for (var i = 0; i < dates.length; i++) 
    {
        //console.log(dates[i]);
        dates[i].readOnly= true;
    }
}

我只是想知道为什么禁用文本框会清除其中的值?这只是默认行为还是我遗漏了什么?

【问题讨论】:

  • 如果这是一个 Web 表单应用程序,只需将该元素的 EnableViewState 设置为 true,提交表单时该值不会消失。
  • 单独禁用不会清除值,例如:jsfiddle.net/pfs2hadt
  • @ScottMarcus 它是一个网络表单应用程序。我没有在任何地方设置视图状态.. 不是默认 true 吗?
  • document.getElementById("dateClass").disabled = true;
  • 我不记得它是否是默认的,因为使用 ViewState 有更多的开销,我认为默认情况下它是不开启的。

标签: javascript c# asp.net


【解决方案1】:

在这种情况下,ViewState 与此无关。问题在于禁用的输入控件不是返回服务器的 Form Post 的一部分。但是因为 TextBox 仍然存在于页面上,asp.net 会用它从 PostBack 接收到的值来填充它,但是那个是 null 所以 TextBox 是空的。

您可以使用以下 sn-p 进行检查。您会看到fromDateE.UniqueID 不存在,因此fromDateE 将被清空。

if (Request.Form[fromDateE.UniqueID] == null)
{
    fromDateE.Text = "Form Post was empty.";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多