여러 줄 텍스트 상자에 maxlength 지정
asp를 사용하려고합니다.
<asp:TextBox ID="txtInput" runat="server" TextMode="MultiLine"></asp:TextBox>
maxlength
속성 을 지정하는 방법을 원 하지만 분명히 multiline textbox
. onkeypress
이벤트에 JavaScript를 사용하려고했습니다 .
onkeypress="return textboxMultilineMaxNumber(this,maxlength)"
function textboxMultilineMaxNumber(txt, maxLen) {
try {
if (txt.value.length > (maxLen - 1)) return false;
} catch (e) { }
return true;
}
이 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를 사용하는 클라이언트 측에서 작동하지만 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>
물론 목적에 더 잘 맞도록 사용할 수있는 더 복잡한 정규식이 있습니다.
간단하게 유지하십시오. 대부분의 최신 브라우저는 텍스트 영역 (IE 포함)에서 maxlength 속성을 지원하므로 해당 속성을 코드 숨김에 추가하기 만하면됩니다. JS, Jquery, 상속, 사용자 정의 코드, 소란스럽지 않습니다.
VB.Net :
fld_description.attributes("maxlength") = 255
씨#
fld_description.attributes["maxlength"] = 255
나만의 롤 :
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>
자바 스크립트없이 텍스트 영역 (HTML5)에서 maxlength를 지원하는 브라우저 (Firefox, Chrome, 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);
}
HTML5에서 변경된 사항 :
ASPX :
<asp:TextBox ID="txtBox" runat="server" maxlength="2000" TextMode="MultiLine"></asp:TextBox>
씨#:
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
값 : 이름 및 값 쌍의 A.
맞춤 속성 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>
$('#txtInput').attr('maxLength', 100);
HTML 텍스트 영역을 사용 runat="server"
하여 서버 측에서 액세스하십시오. 이 솔루션은 javascript 또는 regex를 사용하는 것보다 덜 고통 스럽습니다.
<textarea runat="server" id="txt1" maxlength="100" />
참고 : Text
서버 측에서 속성에 액세스하려면 txt1.Value
대신txt1.Text
다른 접근 방식을 시도했지만 모든 접근 방식에는 몇 가지 약점이 있습니다 (예 : 잘라 내기 및 붙여 넣기 또는 브라우저 호환성). 이것이 내가 지금 사용하고있는 솔루션입니다.
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 + "');");
이것 좀보세요 . 그것을 해결하는 유일한 방법은 시도한대로 자바 스크립트입니다.
편집 : 이벤트를 keypressup으로 변경해보십시오.
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);
}
}
이 스 니펫은 제 경우에서 작동했습니다. 나는 해결책을 찾고 있었고 미래의 독자에게 도움이 될 수 있도록 이것을 작성하려고 생각했습니다.
ASP
<asp:TextBox ID="tbName" runat="server" MaxLength="250" TextMode="MultiLine" onkeyUp="return CheckMaxCount(this,event,250);"></asp:TextBox>
자바 스크립트
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;
}
@ Raúl Roa Answer는 복사 / 붙여 넣기의 경우 나를 위해 일했습니다. 이 동안.
$("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();
}
}
}
});
Here's how we did it (keeps all code in one place):
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/>
<% TextBox1.Attributes["maxlength"] = "1000"; %>
Just in case someone still using webforms in 2018..
you can specify the max length for the multiline textbox in pageLoad Javascript Event
function pageLoad(){
$("[id$='txtInput']").attr("maxlength","10");
}
I have set the max length property of txtInput multiline textbox to 10 characters in pageLoad() Javascript function
This is the same as @KeithK's answer, but with a few more details. First, create a new control based on TextBox.
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);
}
}
}
Note that the code above always sets the textmode to multiline.
In order to use this, you need to register it on the aspx page. This is required because you'll need to reference it using the TagPrefix, otherwise compilation will complain about custom generic controls.
<%@ Register Assembly="MyProject" Namespace="MyProject" TagPrefix="mp" %>
<mp:LimitedMultiLineTextBox runat="server" Rows="3" ...
Nearly all modern browsers now support the use of the maxlength attribute for textarea elements.(https://caniuse.com/#feat=maxlength)
To include the maxlength attribute on a multiline TextBox, you can simply modify the Attributes collection in the code behind like so:
txtTextBox.Attributes["maxlength"] = "100";
If you don't want to have to use the code behind to specify that, you can just create a custom control that derives from 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);
}
}
참고URL : https://stackoverflow.com/questions/1334286/specifying-maxlength-for-multiline-textbox
'IT TIP' 카테고리의 다른 글
Express.js 라우팅 : 선택적 slpat 매개 변수? (0) | 2020.10.20 |
---|---|
GitHub SSH 키의 암호를 재설정하거나 변경하는 방법은 무엇입니까? (0) | 2020.10.20 |
mysql LIKE가 대소 문자를 구분하도록 어떻게 강제합니까? (0) | 2020.10.20 |
배경색으로 네이티브 테두리 반경 반응 (0) | 2020.10.20 |
Bootstrap 4 반응 형 테이블은 너비를 100 % 차지하지 않습니다. (0) | 2020.10.20 |