[asp.net] 여러 줄 텍스트 상자에 maxlength 지정

asp를 사용하려고합니다.

<asp:TextBox ID="txtInput" runat="server" TextMode="MultiLine"></asp:TextBox>

maxlength속성 을 지정하는 방법을 원 하지만 분명히 multiline textbox. 나는 자바 스크립트를 사용하려고 노력했습니다.onkeypress이벤트에 .

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에서 변경된 사항 :

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.


답변

자바 스크립트없이 텍스트 영역 (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);
}


답변

맞춤 속성 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>