呈现html时,maxlength属性不显示?

时间:2014-03-20 12:57:05

标签: javascript jquery html asp.net

我有一个文本框,其textmode设置为多行。这样做会将文本框呈现为textarea。有这样的效果:

<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>

我遇到的问题是当我运行我的项目并检查textarea时,渲染的html没有显示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总是未定义....

1 个答案:

答案 0 :(得分:3)

MaxLength属性不适用于<textarea>,因此它会被忽略。来自MSDN

  

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

小写maxlength属性适用于<textarea>,但并非所有浏览器都支持它,因此它可能取决于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代码中使用<asp:Input>控件,那么您可以使用<textarea runat="server">代替官方 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>