【问题标题】:maxlength attribute doesn't display when html is rendered?呈现 html 时不显示 maxlength 属性?
【发布时间】:2014-04-27 08:13:56
【问题描述】:

我有一个文本模式设置为多行的文本框。这样做会将文本框呈现为文本区域。大意是这样的:

<asp:TextBox ID="txtFinBillingTerms" maxlength="500" runat="server" ToolTip="(e.g. 90/10, 30/30/30/10, etc.)" TextMode="MultiLine" Columns="5" Rows="5" Width="300px"></asp:TextBox>

我遇到的问题是,当我运行我的项目并检查呈现的 html 的 textarea 时,它没有显示 maxlength 属性,就好像它消失了:

渲染的html:

<textarea name="ctl00$MainContent$txtFinBillingTerms" rows="5" cols="5" id="MainContent_txtFinBillingTerms" title="(e.g. 90/10, 30/30/30/10, etc.)" style="width:300px;"></textarea>

这给我带来了问题,因为我试图放入一些 javascript/jquery 来限制我的 textarea 的输入,即:

$('textarea').keypress(function (e) {
            var maxLength = $(this).attr('maxlength');
            alert(maxLength);
            if (e.which < 0x20) {
                // e.which < 0x20, then it's not a printable character
                // e.which === 0 - Not a character
                return;     // Do nothing
            }
            if (this.value.length == max) {
                e.preventDefault();
            } else if (this.value.length > max) {
                // Maximum exceeded
                this.value = this.value.substring(0, max);
            }
        });

但 maxLength 始终未定义....

【问题讨论】:

  • 您正在使用 var maxLength 但稍后在代码中您只使用 max。
  • e.which 怎么可能小于0x20?你想在这里做什么,x 不是乘数,* 是,但是乘以零总是返回零,所以有点不清楚意图是什么?
  • 杰夫的错误我必须解决这个问题。 adeneo 我不想在这里乘以 0x20 是十六进制。

标签: javascript jquery html asp.net


【解决方案1】:

MaxLength 属性不适用于&lt;textarea&gt;,所以它被简单地忽略了。来自MSDN

此属性仅在 TextMode 属性设置为 TextBoxMode.SingleLine 或 TextBoxMode.Password 时适用。

小写maxlength 属性适用于&lt;textarea&gt;,但并非所有浏览器都支持它,因此它可能取决于该属性或 ASP.NET 将如何处理该属性(它不支持它,因此它可能会简单地删除该属性)。

编辑:您可以使用一些 JavaScript 或带有以下表达式的验证控件来解决此限制:ValidationExpression="^[\s\S]{0,500}$"(代码来自 here)。如果您只想执行客户端验证,那么您至少有以下选项:

1) 在 ASP.NET 页面和 JavaScript 中为该属性使用不同的名称(如 data-maxlength):

<asp:TextBox runat="server" ID="txtFinBillingTerms"
    data-maxlength="500"
    ToolTip="(e.g. 90/10, 30/30/30/10, etc.)"
    TextMode="MultiLine"
    Columns="5" Rows="5" Width="300px">
</asp:TextBox>

与:

var maxLength = $(this).data('maxlength');

2) 如果您不直接在 ASP.NET 代码中使用 &lt;asp:Input&gt; 控件,那么您可以使用 &lt;textarea runat="server"&gt; 而不是 官方 ASP.NET 控件,例如 this example

<textarea runat="server" ID="txtFinBillingTerms"
    maxlength="500"
    title="(e.g. 90/10, 30/30/30/10, etc.)"
    cols="5" rows="5" style="width: 300px">
</textarea>

【讨论】:

  • 很好,TextMode="MultiLine" 创建了一个文本区域。
  • 即使我使用maxlength 这也不能正常工作。那么在这里需要做什么呢?
  • @JonH 已编辑。一种可能的解决方法是使用验证控件。
  • Adriano 我不确定我明白你的意思,我想让它尽可能地可重用,我可能在不同页面的一个页面上有 5 个文本区域,所以我想要在我的 site.master 中使用通用的东西处理这个的文件。我不想要所有这些文本区域的服务器端验证控件,我遇到的问题是一些文本区域的最大长度与其他文本区域不同。难道没有一种标准的方法可以让我在 jquery 中为任何浏览器获取 textarea 的最大长度吗?
  • @JonH 只是为该属性使用了另一个名称,遗憾的是它由 ASP.NET 输入管理,因此它被 textarea 忽略。您可以使用自定义属性(data-)或直接使用带有 runat="server" 的 textarea。
猜你喜欢
  • 2021-05-29
  • 2012-03-22
  • 2014-04-04
  • 1970-01-01
  • 2022-12-28
  • 2018-08-03
  • 2018-02-08
  • 2013-05-16
相关资源
最近更新 更多