我有一个画面,该画面有一个控件
<asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000"></asp:TextBox>
该控件是一个TextBox,但是设置了TextMode="MultiLine",也就是让其可以书写多行。并且设置了MaxLength="3000",是为了让其输入3000个文字后就不能在输入了。
但是,目前出现了一个问题,就是MaxLength="3000"的设置没有起作用,我输入3000个文字后仍是可以输入。如果不设置TextMode="MultiLine",设置MaxLength是起作用的,
可是设置了TextMode之后,却达不到效果。
麻烦哪位热心人可以帮忙一下。谢谢。
<asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000"></asp:TextBox>
该控件是一个TextBox,但是设置了TextMode="MultiLine",也就是让其可以书写多行。并且设置了MaxLength="3000",是为了让其输入3000个文字后就不能在输入了。
但是,目前出现了一个问题,就是MaxLength="3000"的设置没有起作用,我输入3000个文字后仍是可以输入。如果不设置TextMode="MultiLine",设置MaxLength是起作用的,
可是设置了TextMode之后,却达不到效果。
麻烦哪位热心人可以帮忙一下。谢谢。
{
var intlen=txtTeamDetail.value.length;
if (intlen>50)
{
intlen=intlen.substring(0,50);
}
}
我写了这个js, 并且在最外层table中使用,如下:
<table width="800" cellpadding="0" onkeydown="insertKey();" onkeypress="isOver();">
可是仍是不会自动截取50位。(3000位太多,先使用一个50位进行测试。)
{
var intlen=txtTeamDetail.value.length;
if (intlen>50)
{
intlen=intlen.substring(0,50);
}
}
我写了这个js, 并且在最外层table中使用,如下:
<table width="800" cellpadding="0" onkeydown="insertKey();" onkeypress="isOver();">
可是仍是不会自动截取50位。(3000位太多,先使用一个50位进行测试。)
所以我们必须自己去做这部分工作,其实也很简单,加几个属性就好了,这里需要注意,用键盘输入和鼠标右键粘贴的情况。最简单的做法我是写一个自定义控件,继承于TextBox。
大概代码如下。
public class MulTextBox :TextBox
{
protected override void OnPreRender(EventArgs e)
{
if (this.Page != null)
{
if (this.TextMode == TextBoxMode.MultiLine)
{
this.Page.ClientScript.RegisterClientScriptResource(typeof(MulTextBox), "MulTextBox.CheckFunction.js");
this.Attributes.Add("onmousedown", "CheckTextboxLength('" + this.ClientID + "','" + this.MaxLength + "')");
this.Attributes.Add("onkeyup", "CheckTextboxLength('" + this.ClientID + "','" + this.MaxLength + "')");
this.Attributes.Add("onmouseout", "CheckTextboxLength('" + this.ClientID + "','" + this.MaxLength + "')");
}
}
base.OnPreRender(e);
}
}javascript:
function CheckTextboxLength(obj,maxlength)
{
var textObj = document.getElementById(obj);
var len = textObj.value.length;
if(len > maxlength)
{
textObj.value = textObj.value.substring(0,maxlength);
}
}
这里没有使用window.clipboardData.getData("Text")是由于使用此脚本会弹出一个提示,客户体验不是很好。
<script>
function checkTextLength(obj, length)
{
if(obj != null)
{
if(obj.value.length > length)
{
if(event.keyCode == 0)
;
obj.value = obj.value.substr(0, length);
}
}
}
</script><asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000" onpropertychange="checkTextLength(this, 255);"> </asp:TextBox>
可以通过以下步骤来达到你的要求:
1、在客户端通过js 来检查输入字符长度
2、在服务端后台代码通过 substring 来取指定长度的字符串,这个长度一定不能大于对应数据库字段的长度。
var maxLen = 50;
var xxx=document.getElementById("txtTeamList");
if (xxx.value.length > maxLen)
xxx.value=xxx.value.substr(0,50);
}<asp:TextBox onKeyUp="checkMaxInput()" ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000"> </asp:TextBox>
function checkMaxInput() {
var maxLen = 50;
var txtTeam=document.getElementById("txtTeamDetail");
if (txtTeam.value.length > maxLen)
txtTeam.value=txtTeam.value.substr(0,50);
} <asp:TextBox ID="txtTeamDetail" runat="server" Width="250px" TextMode="MultiLine"
CssClass="text03" Height="150px" onKeyUp="checkMaxInput();" ></asp:TextBox>
{
return ((fData == null) || (fData.length == 0))
}function IsInteger(fData)
{
//如果为空,返回true
if (IsEmpty(fData))
return true
if ((isNaN(fData)) || (fData.indexOf(".") != -1) || (fData.indexOf("-") != -1))
return false return true
}function setControlMaxLength()
{
var areas = document.getElementsByTagName("textarea");
for (var i = 0; i < areas.length; i++)
{
if (areas[i].getAttribute("maxlength"))
{
if (IsInteger(areas[i].getAttribute("maxlength")))
{
try
{
areas[i].addEventListener('keydown', controlMaxLength, false);
areas[i].addEventListener('input', controlMaxLengthByChange, false);
}
catch (e)
{
areas[i].onkeydown = controlMaxLength;
areas[i].onpropertychange = controlMaxLengthByChange;
}
}
}
}
}function controlMaxLength()
{
var evt = arguments[0];
var sender;
var iKeyCode = -1;
if (evt)
{
sender = evt.target;
iKeyCode = evt.which;
}
else
{
evt = event;
sender = evt.srcElement;
iKeyCode = evt.keyCode;
} if (!((iKeyCode == 8) || (iKeyCode == 46) || ((iKeyCode >= 33) && (iKeyCode <= 40))))
{
if (sender.value.length + 1 > sender.getAttribute("maxlength"))
{
try
{
evt.preventDefault();
}
catch (ex)
{
evt.returnValue = false;
}
}
}
}function controlMaxLengthByChange()
{
var sender;
if (arguments[0])
{
sender = arguments[0].target;
}
else
{
sender = event.srcElement;
} if (sender.value.length > sender.getAttribute("maxlength"))
{
sender.value = sender.value.substr(0, sender.getAttribute("maxlength"));
}
}
document.getElementById('txt1').attachEvent("onpropertychange",txChange);
}else if(navigator.userAgent.indexOf("Firefox")>0){
document.getElementById('txt1').addEventListener("input",txChange,false);
}
function txChange(){
var txt = document.getElementById('txt1');
if(txt.value.length>1000)
txt.value=txt.value.substr(0,1000);
只会JS解决
作为参考
应该没问题啊.你复制我这个代码测试,保证OK<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>sdfsdfs</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<SCRIPT LANGUAGE="JavaScript">
function checkMaxInput() {
var maxLen = 50;
var txtTeam=document.getElementById("dtext");
if (txtTeam.value.length > maxLen)
txtTeam.value=txtTeam.value.substr(0,50);
}
</SCRIPT>
<body>
<form id="gg" name="gg" METHOD="POST" runat="server">
<asp:TextBox width=500 height=100 id="dtext" onKeyUp="checkMaxInput()" onKeyDown="checkMaxInput()" runat="server" TextMode="MultiLine"></asp:TextBox>
</form>
</body>
</html>
<asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px"
TabIndex="2" onkeyup="this.value = this.value.slice(0, 3000)"></asp:TextBox>
但是我只有一分,那给yechangda吧。对于大家表示感谢。