我有一个文本框,其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总是未定义....
答案 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>