asp.net - تحديد الطول الأقصى لمربع النص متعدد الأسطر




textbox multiline maxlength (13)

$("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();
                    }
                }
            }
        });

أحاول استخدام asp:

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

أريد طريقة لتحديد الخاصية maxlength ، ولكن يبدو أنه لا توجد طريقة ممكنة 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 هذه هي أنه بعد كتابة الأحرف لا يسمح لك بحذف أي منها أو استبداله ، فهذا السلوك غير مرغوب فيه.

هل لديك أي فكرة عما يمكن أن أغيره في الشفرة المذكورة أعلاه لتجنب ذلك أو أي طرق أخرى للتغلب عليه؟


استخدام السمة المخصصة 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>

لقد جربت أساليب مختلفة ولكن كل واحد لديه بعض نقاط الضعف (أي مع قص ولصق أو توافق المستعرض). هذا هو الحل الذي أستخدمه الآن:

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 + "');");

هناك طريقة أخرى لإصلاح هذا للمتصفحات (Firefox ، Chrome ، Safari) التي تدعم maxlength على textareas (HTML5) بدون javascript وهي اشتقاق فئة فرعية من فئة System.WI.WI.WebControls.TextBox وتجاوز طريقة Render. ثم في الأسلوب overridden أضف سمة 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);
}

لفة بنفسك:

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>

إلقاء نظرة على this . الطريقة الوحيدة لحلها هي من خلال جافا سكريبت كما حاولت.

تعديل : حاول تغيير الحدث إلى ضغطة مفتاح.


المثال التالي في 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); 

          }
     }                  


تغيرت الأشياء في 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 :

ملخص: يحصل على مجموعة من السمات الاعتباطية (لتقديم فقط) التي لا تتوافق مع الخصائص على عنصر التحكم.

الإرجاع: A System.Web.UI.AttributeCollection لأزواج الاسم والقيمة.


جرب هذا 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 للتحقق من صحة الإدخال على تطبيق جافا سكريبت.


استخدم textarea HTML مع runat="server" للوصول إليه في جانب الخادم. هذا الحل لديه ألم أقل من استخدام javascript أو regex.

<textarea runat="server" id="txt1" maxlength="100" />

ملاحظة: للوصول إلى خاصية Text في جانب الملقم ، يجب استخدام txt1.Value بدلاً من txt1.Text


أبقيها بسيطة. تدعم معظم المتصفحات الحديثة سمة maxlength في منطقة نصية (بما في ذلك IE) ، لذلك ببساطة أضف تلك السمة في التعليمات البرمجية الخلفية. لا JS ، لا مسج ، لا الميراث ، رمز مخصص ، لا ضجة ، لا مهوس.

VB.Net:

fld_description.attributes("maxlength") = 255

C #

fld_description.attributes["maxlength"] = 255

$('#txtInput').attr('maxLength', 100);

تبدأ الجلسة في كل مرة يقوم فيها مستخدم جديد بالانتقال إلى موقع الويب ، بغض النظر عما إذا كان مجهولاً أم لا. المصادقة لا علاقة لها بالجلسة.

مهلة المصادقة هي مقدار الوقت الذي يكون فيه ملف تعريف ارتباط المصادقة جيدًا على متصفح المستخدم. بمجرد انتهاء صلاحية ملف تعريف الارتباط ، يجب إعادة المصادقة للوصول إلى الموارد المحمية على الموقع.

لذا ، إذا انقضت مهلة الجلسة قبل ملف تعريف ارتباط المصادقة - فما زال يتم توثيقها ، ولكن جميع متغيرات جلسة العمل تختفي ، وقد تتسبب في حدوث أخطاء في موقعك على الويب إذا لم يتم تأديبك في التحقق من الأصفار والشروط الأخرى الناتجة عن الجلسة المفقودة.

إذا انقضت مهلة المصادقة قبل الجلسة ، فستظل كل متغيرات جلسة العمل موجودة ، ولكنها لن تكون قادرة على الوصول إلى الموارد المحمية حتى تقوم بتسجيل الدخول مرة أخرى.





asp.net textbox multiline maxlength