我试图用asp:
<asp:TextBox ID="txtInput" runat="server" TextMode="MultiLine"></asp:TextBox>
我想一个方法来指定maxlength
属性,但显然没有一种方式,可以multiline textbox
。 我一直在尝试使用一些JavaScript的onkeypress
的事件:
onkeypress="return textboxMultilineMaxNumber(this,maxlength)"
function textboxMultilineMaxNumber(txt, maxLen) {
try {
if (txt.value.length > (maxLen - 1)) return false;
} catch (e) { }
return true;
}
虽然这个JavaScript函数做工精细的问题是,写字后它不允许你删除并替换其中任何一个,这种行为是不希望的。
你有任何想法可能是什么我可能在上面的代码更改,以避免或任何其他方式来避开它?
Answer 1:
尝试此javascript:
function checkTextAreaMaxLength(textBox,e, length)
{
var mLen = textBox["MaxLength"];
if(null==mLen)
mLen=length;
var maxLength = parseInt(mLen);
if(!checkSpecialKeys(e))
{
if(textBox.value.length > maxLength-1)
{
if(window.event)//IE
e.returnValue = false;
else//Firefox
e.preventDefault();
}
}
}
function checkSpecialKeys(e)
{
if(e.keyCode !=8 && e.keyCode!=46 && e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40)
return false;
else
return true;
}
在控制调用它是这样的:
<asp:TextBox Rows="5" Columns="80" ID="txtCommentsForSearch" MaxLength='1999' onkeyDown="checkTextAreaMaxLength(this,event,'1999');" TextMode="multiLine" runat="server"> </asp:TextBox>
您也可以只使用checkSpecialKeys函数来验证你的JavaScript实现输入。
Answer 2:
使用正则表达式验证来代替。 这将工作在使用JavaScript客户端,也当禁用JavaScript(如长度检查将在服务器上,以及执行)。
下面的示例检查所输入的值是长字符0至100:
<asp:RegularExpressionValidator runat="server" ID="valInput"
ControlToValidate="txtInput"
ValidationExpression="^[\s\S]{0,100}$"
ErrorMessage="Please enter a maximum of 100 characters"
Display="Dynamic">*</asp:RegularExpressionValidator>
当然也有更复杂的regexs你可以用它来更好地满足您的目的。
Answer 3:
把事情简单化。 大多数现代浏览器都支持的文本区域(即包括)最大字段属性,因此只添加属性的代码隐藏。 没有JS,没有jQuery的,没有继承,自定义代码,没有什么大惊小怪的,没有搞乱。
VB.Net:
fld_description.attributes("maxlength") = 255
C#
fld_description.attributes["maxlength"] = 255
Answer 4:
滚你自己:
function Count(text)
{
//asp.net textarea maxlength doesnt work; do it by hand
var maxlength = 2000; //set your value here (or add a parm and pass it in)
var object = document.getElementById(text.id) //get your object
if (object.value.length > maxlength)
{
object.focus(); //set focus to prevent jumping
object.value = text.value.substring(0, maxlength); //truncate the value
object.scrollTop = object.scrollHeight; //scroll to the end to prevent jumping
return false;
}
return true;
}
这样调用:
<asp:TextBox ID="foo" runat="server" Rows="3" TextMode="MultiLine" onKeyUp="javascript:Count(this);" onChange="javascript:Count(this);" ></asp:TextBox>
Answer 5:
此固定为那些支持上文字区域(HTML5)的maxlength无javascript浏览器(Firefox,铬,Safari浏览器)的另一种方法是导出System.Web.UI.WebControls.TextBox类的子类,并重写Render方法。 然后在重写的方法呈现为正常之前添加maxlength属性。
protected override void Render(HtmlTextWriter writer)
{
if (this.TextMode == TextBoxMode.MultiLine
&& this.MaxLength > 0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, this.MaxLength.ToString());
}
base.Render(writer);
}
Answer 6:
使用自定义属性MAXSIZE =“100”
<asp:TextBox ID="txtAddress" runat="server" maxsize="100"
Columns="17" Rows="4" TextMode="MultiLine"></asp:TextBox>
<script>
$("textarea[maxsize]").each(function () {
$(this).attr('maxlength', $(this).attr('maxsize'));
$(this).removeAttr('maxsize');
});
</script>
这将使得这样的
<textarea name="ctl00$BodyContentPlac
eHolder$txtAddress" rows="4" cols="17" id="txtAddress" maxlength="100"></textarea>
Answer 7:
事情已经在HTML5改变:
ASPX:
<asp:TextBox ID="txtBox" runat="server" maxlength="2000" TextMode="MultiLine"></asp:TextBox>
C#:
if (!IsPostBack)
{
txtBox.Attributes.Add("maxlength", txtBox.MaxLength.ToString());
}
渲染HTML:
<textarea name="ctl00$DemoContentPlaceHolder$txtBox" id="txtBox" maxlength="2000"></textarea>
对于元数据Attributes
:
摘要:获取不符合在控制性的任意属性(只用于呈现)的集合。
返回: System.Web.UI.AttributeCollection
名称和值对。
Answer 8:
$('#txtInput').attr('maxLength', 100);
Answer 9:
我尝试不同的方法,但每一个有一些不足之处(即剪切和粘贴或浏览器的兼容性)。 这是我现在使用的解决方案:
function multilineTextBoxKeyUp(textBox, e, maxLength) {
if (!checkSpecialKeys(e)) {
var length = parseInt(maxLength);
if (textBox.value.length > length) {
textBox.value = textBox.value.substring(0, maxLength);
}
}
}
function multilineTextBoxKeyDown(textBox, e, maxLength) {
var selectedText = document.selection.createRange().text;
if (!checkSpecialKeys(e) && !e.ctrlKey && selectedText.length == 0) {
var length = parseInt(maxLength);
if (textBox.value.length > length - 1) {
if (e.preventDefault) {
e.preventDefault();
}
else {
e.returnValue = false;
}
}
}
}
function checkSpecialKeys(e) {
if (e.keyCode != 8 && e.keyCode != 9 && e.keyCode != 33 && e.keyCode != 34 && e.keyCode != 35 && e.keyCode != 36 && e.keyCode != 37 && e.keyCode != 38 && e.keyCode != 39 && e.keyCode != 40) {
return false;
} else {
return true;
}
}
在这种情况下,我在关键上按下按键调用multilineTextBoxKeyUp起来multilineTextBoxKeyDown:
myTextBox.Attributes.Add("onkeyDown", "multilineTextBoxKeyDown(this, event, '" + maxLength + "');");
myTextBox.Attributes.Add("onkeyUp", "multilineTextBoxKeyUp(this, event, '" + maxLength + "');");
Answer 10:
看看这个 。 解决这个问题的唯一办法是通过JavaScript作为你尝试。
编辑:尝试改用keypressup事件。
Answer 11:
使用HTML文本区域与runat="server"
来访问它的服务器端。 该解决方案具有比使用JavaScript或正则表达式痛苦少。
<textarea runat="server" id="txt1" maxlength="100" />
注意:要访问Text
属性在服务器端,你应该使用txt1.Value
代替txt1.Text
Answer 12:
在JavaScript / jQuery的下面的例子会做但─
<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
<script type="text/javascript">
function count(text, event) {
var keyCode = event.keyCode;
//THIS IS FOR CONTROL KEY
var ctrlDown = event.ctrlKey;
var maxlength = $("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val().length;
if (maxlength < 200) {
event.returnValue = true;
}
else {
if ((keyCode == 8) || (keyCode == 9) || (keyCode == 46) || (keyCode == 33) || (keyCode == 27) || (keyCode == 145) || (keyCode == 19) || (keyCode == 34) || (keyCode == 37) || (keyCode == 39) || (keyCode == 16) || (keyCode == 18) ||
(keyCode == 38) || (keyCode == 40) || (keyCode == 35) || (keyCode == 36) || (ctrlDown && keyCode == 88) || (ctrlDown && keyCode == 65) || (ctrlDown && keyCode == 67) || (ctrlDown && keyCode == 86))
{
event.returnValue = true;
}
else {
event.returnValue = false;
}
}
}
function substr(text)
{
var txtWebAdd = $("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val();
var substrWebAdd;
if (txtWebAdd.length > 200)
{
substrWebAdd = txtWebAdd.substring(0, 200);
$("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val('');
$("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val(substrWebAdd);
}
}
Answer 13:
这段代码在我的情况下工作。 我正在寻找解决方案,并认为写这使得它可以帮助任何未来的读者。
ASP
<asp:TextBox ID="tbName" runat="server" MaxLength="250" TextMode="MultiLine" onkeyUp="return CheckMaxCount(this,event,250);"></asp:TextBox>
Java脚本
function CheckMaxCount(txtBox,e, maxLength)
{
if(txtBox)
{
if(txtBox.value.length > maxLength)
{
txtBox.value = txtBox.value.substring(0, maxLength);
}
if(!checkSpecialKeys(e))
{
return ( txtBox.value.length <= maxLength)
}
}
}
function checkSpecialKeys(e)
{
if(e.keyCode !=8 && e.keyCode!=46 && e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40)
return false;
else
return true;
}
@劳尔·罗亚答案却在复制/粘贴的情况下,为我工作。 而这样做。
Answer 14:
$("textarea[maxlength]").on("keydown paste", function (evt) {
if ($(this).val().length > $(this).prop("maxlength")) {
if (evt.type == "paste") {
$(this).val($(this).val().substr(0, $(this).prop("maxlength")));
} else {
if ([8, 37, 38, 39, 40, 46].indexOf(evt.keyCode) == -1) {
evt.returnValue = false;
evt.preventDefault();
}
}
}
});
Answer 15:
下面是我们如何做到了(保持在一个地方的所有代码):
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/>
<% TextBox1.Attributes["maxlength"] = "1000"; %>
万一有人还在使用web表单在2018 ..
Answer 16:
您可以指定最大长度为页面加载JavaScript事件的多文本
function pageLoad(){
$("[id$='txtInput']").attr("maxlength","10");
}
我已经在页面加载txtInput多文本框的最大长度属性设置为10个字符()Javascript函数
Answer 17:
这是一样的@ KeithK的答案,但有一些细节。 首先,创建一个基于文本框的新控制。
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyProject
{
public class LimitedMultiLineTextBox : System.Web.UI.WebControls.TextBox
{
protected override void Render(HtmlTextWriter writer)
{
this.TextMode = TextBoxMode.MultiLine;
if (this.MaxLength > 0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, this.MaxLength.ToString());
}
base.Render(writer);
}
}
}
请注意,上面总是代码设置文本模式到多。
为了利用这一点,你需要注册它的aspx页面上。 这是必需的,因为你需要使用的TagPrefix引用它,否则编译会抱怨定制的通用控件。
<%@ Register Assembly="MyProject" Namespace="MyProject" TagPrefix="mp" %>
<mp:LimitedMultiLineTextBox runat="server" Rows="3" ...
Answer 18:
几乎所有的现代浏览器都支持使用的textarea元素的最大长度属性。 (https://caniuse.com/#feat=maxlength)
要包括一个多行TextBox的最大长度属性,你可以简单地修改代码中的属性集合背后,像这样:
txtTextBox.Attributes["maxlength"] = "100";
如果你不希望有使用后面的代码来指定,你可以创建一个从TextBox派生的自定义控件:
public class Textarea : TextBox
{
public override TextBoxMode TextMode
{
get { return TextBoxMode.MultiLine; }
set { }
}
protected override void OnPreRender(EventArgs e)
{
if (TextMode == TextBoxMode.MultiLine && MaxLength != 0)
{
Attributes["maxlength"] = MaxLength.ToString();
}
base.OnPreRender(e);
}
}
文章来源: Specifying maxlength for multiline textbox