2012-03-21 48 views
10

使用多行文本框(生成文本区域)设置时,MaxLength属性不起作用。什么是最好的解决方法?我想用最少的丑陋JavaScript获得基本的,预期的功能等。只是防止用户输入超过最大数量的字符。如何为多行TextBox设置maxlength?

+0

[指定最大长度为多行文本框](HTTP的可能重复。com/questions/1334286/specify-maxlength-for-multiline-textbox) – 2015-06-03 08:22:45

回答

5

如果您想让用户知道他在写入时是否超出了字符数量,则可以使用附加到keypress事件的JavaScript函数。这个函数将测试输入的长度,并在达到最大值时取消字符渲染。

另一种选择是使用RegularExpressionValidator控件验证提交时的输入。

在我看来,第一个选择更好。

我没有添加任何代码,因为谷歌充满了各种口味的例子,这是一个非常普遍的任务。

Here您有一个示例搜索可能会有帮助。

5

嘿pukipuki你可以做如下:

<asp:TextBox ID="txtValue" runat="server"TextMode="MultiLine" Rows="10"Columns="50"></asp:TextBox> 

$(document).ready(function(){ 
var MaxLength = 250; 
$('#txtValue').keypress(function(e) 
{ 
    if ($(this).val().length >= MaxLength) 
{  
    e.preventDefault(); 
} 
});}); 

你可以看到更多在此以下链接: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html

+5

虽然这会阻止用户输入更多文本,但也会阻止他们使用框中的删除或退格键(或任何其他键),因此他们可以'实际上在文本达到极限时编辑文本。 – 2012-07-19 13:47:06

+0

你的答案比接受的答案更完整和有用。 +1 for – 2012-09-11 22:06:41

+2

不适用于复制和粘贴 – fubo 2014-01-31 15:09:29

1

如果您使用的是模型对象绑定到文本框,您可以使用DataAnnotations属性设置该属性的最大长度。我基于MVC,但它也适用于ASP.NET!

这样你就不会乱用任何Javascript或设置任何标记。

+1

不幸的是,WebForms没有像MVC这样的数据注释的本地支持。但有一些解决方法,我检查出来,谢谢!理想答案的完美例子)+1 – 2012-03-21 18:25:04

20

如果你不关心旧的浏览器(见supported browsers here),
可以设置的MaxLength通常这样

<asp:TextBox ID="txt1" runat="server" TextMode="MultiLine" MaxLength="100" /> 

,并迫使它打印出来的HTML

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    txt1.Attributes.Add("maxlength", txt1.MaxLength.ToString()); 
} 
0

试试这个......

Dim script As String = "" 

    script = script + " <script type='text/javascript'> function CheckLength(obj) {" 
    script = script + " var object = document.getElementById(obj);" 
    script = script + " if (object.value.length > 5) {" 
    script = script + "  object.focus();" 
    script = script + "  object.value = object.value.substring(0, 5); " 
    script = script + "  object.scrollTop = object.scrollHeight; " 
    script = script + "  return false;" 
    script = script + " }" 
    script = script + " return true;" 
    script = script + " }</script>" 


    Dim b As New TextBox() 
    b.ID = "btnSomeButton" 
    b.TextMode = TextBoxMode.MultiLine 
    Mypanel.Controls.Add(b) 
    b.Attributes.Add("onkeyup", "return CheckLength('" & b.ClientID & "');") 

    Page.ClientScript.RegisterStartupScript(Page.GetType(), "key", script, False) 
3

这里是一个跨浏览器的解决方案:

<asp:TextBox TextMode="MultiLine" runat="server" ID="txtPurpose" Columns="50" Rows="2" onkeypress="return isokmaxlength(event,this,255);" ClientIDMode="static"></asp:TextBox> 

的Javascript:

function isokmaxlength(e,val,maxlengt) { 
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode 

    if (!(charCode == 44 || charCode == 46 || charCode == 0 || charCode == 8 || (val.value.length < maxlengt))) { 
     return false; 
    } 
} 

你要想想复制和粘贴。这有点棘手,我只是用Jquery禁用它。但是您可以创建自己的功能来执行更复杂的验证。但在我的情况下,不允许复制和粘贴。

Jquery的禁用复制和粘贴://计算器:

jQuery(function ($) { 

    $("#txtPurpose").bind({ 
     paste: function (e) { 
      e.preventDefault(); 
     } 
    }); 

}); 
相关问题