2009-06-19 11 views
7

मैं सी # में एक पाठ क्षेत्र के लिए प्रतिबंधित textarea, कृपया कोड नीचे देखें:स्वीकार नहीं कर 250 चरित्र

<asp:Label ID="lblQuestions" runat="server" CssClass="addinfo"> 
        Question & Comments</asp:Label> 
<asp:TextBox ID="txtQuestions" Rows="5" Columns="5" TextMode="MultiLine" runat="server" MaxLength="250"></asp:TextBox> 
अब मैं चाहता हूँ कि पाठ क्षेत्र में 250 से अधिक वर्ण स्वीकार नहीं करना चाहिए, जो कुछ भी उपयोगकर्ता कॉपी कर सकता & चिपकाएं, द्वारा

लेखन और DRAG & DROP आदि, यदि उपयोगकर्ता & को कॉपी करने या खींचने का प्रयास करते हैं तो 250 से अधिक वर्ण ड्रॉप करते हैं तो पहले 250 वर्णों को टेक्स्टरेरा में कॉपी किया जाना चाहिए। मुझे पता है कि टेक्सटेरिया में कोई MAXLENGTH विशेषता नहीं है। यदि जावास्क्रिप्ट या Jquery के साथ .NET समाधान के साथ यह संभव नहीं है।

कृपया मदद

+0

यह इस प्रश्न का डुप्लिकेट प्रतीत होता है http://stackoverflow.com/questions/1334286/specifying-maxlength-for-multiline-textbox/1334343#1334343 –

+0

सिवाय इसके कि प्रश्न का उत्तर केवल आईई में काम करता है - और थोडा है बदसूरत - और सही क्लिक कॉपी/पेस्ट या ड्रैग/ड्रॉप के साथ काम नहीं करता है। – gnarf

उत्तर

3

आप तार कार्यों के लिए है की घटनाओं के लिए

onpaste, onkeyup और क्षेत्र है जिसके लिए आप इस कार्रवाई करना चाहता हूँ की onFocus।

एएसपी टेक्स्टबॉक्स के लिए मुझे लगता है कि आपको केवल ऑनटेक्स्ट चेंजेड ईवेंट पर विचार करना होगा।

पाठ क्षेत्र

<INPUT id="counterMessage" readOnly size="3" value="250" name="counterMessage">                          
<TEXTAREA onpaste="PasteCounter(this.form.txtAreaMessage,this.form.counterMessage,250);" 
                                  id="txtAreaMessage" onkeyup="textCounter(this.form.txtAreaMessage,this.form.counterMessage,250);" 
                                  style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; OVERFLOW: hidden; BORDER-LEFT: 0px; WIDTH: 99%; BORDER-BOTTOM: 0px; HEIGHT: 95px; TEXT-ALIGN: justify" 
                                  onfocus="textCounter(this.form.txtAreaMessage,this.form.counterMessage,250);" name="txtAreaMessage" 
                                  rows="3" runat="server"></TEXTAREA> 


function PasteCounter(field, countfield, maxlimit) 
     { 
      var len; 
      var txt = clipboardData.getData("Text"); 
      txt = field.value + txt 
      len = parseInt(txt.length); 
      if (len > maxlimit) 
      { 
       event.returnValue=false; 
       txt = txt.substring(0, maxlimit);  
       field.value = txt;     
       alert("Only " + maxlimit + " characters are allowed"); 
      } 
      countfield.value = maxlimit - txt.length; 
     }  
     function textCounter(field, countfield, maxlimit) 
     { 
      if (field.value.length > maxlimit) 
      {  
       field.value = field.value.substring(0, maxlimit); 
       alert("Only " + maxlimit + " characters are allowed"); 
      } 
      countfield.value = maxlimit - field.value.length; 
     } 

countfield पाठ बॉक्स के लिए शेष वर्ण दिखाने के लिए है।

+0

धन्यवाद, मुझे पता है कि इन घटनाओं को संभालने की जरूरत है, क्या मेरे पास उपरोक्त समस्या के लिए कोड हो सकता है। –

+0

बहुत धन्यवाद, क्या उपर्युक्त समाधान काम करेगा यदि उपयोगकर्ता डेटा दर्ज करता है तो 250 वर्णों को प्रतिलिपि करके कॉपी करके पेस्ट करके सीधे नहीं लिखा जाता है। –

+0

क्या मुझे उसी फ़ंक्शन ऑनकीप ईवेंट को कॉल करने की आवश्यकता है? –

1

1) इस संभाल करने के लिए एक बहुत ही सरल तरीका onChange घटना के साथ शुरू करने के लिए है:

<textarea id="yourTextArea" onchange="this.value.length = Math.min(this.value.length, 250)"></textarea> 

बड़ी खामी है कि यहाँ जब तक ध्यान केंद्रित पाठ क्षेत्र छोड़ दिया है पाठ क्षेत्र को अद्यतन नहीं होगा।

2) आप उपर्युक्त उदाहरण को फॉर्म फॉर्मेशन फ़ंक्शन पर अनुकूलित करने में सक्षम होना चाहिए जो फ़ॉर्म के ऑनबमिट ईवेंट पर आग लगती है।

<script type="text/javascript"> 
    document.forms[0].onsubmit = function() { document.getElementById("yourTextArea").value.length = Math.min(this.value.length, 250); } 
</script> 

3) आप सर्वर साइड पर यह मान्य करना चाहते हैं, तो आप वास्तव में सिर्फ पाठ क्षेत्र के मूल्य मिलता है और यह काट-छांट की जरूरत है।

string validText = yourTextArea.Value.Substring(0, 250); 
0

इंटरैक्टिव प्रतिक्रिया के लिए, आप ऊपर जावास्क्रिप्ट में, जब तक यह सर्वर (एक पृष्ठ पुनः लोड की आवश्यकता होती है) के लिए वापस पोस्ट किया जाता है वायर्ड नियंत्रण प्रतिक्रिया नहीं के रूप में करना चाहिए। यदि आप प्रत्येक कीस्ट्रोक पर वर्ण गणना अद्यतन करते हैं तो यह सर्वर लोड का थोड़ा सा कारण बन सकता है।

नीचे एक मोटा जेएस कार्यान्वयन है जो प्रत्येक परिवर्तन पर बस ASCII वर्णों की संख्या को गिनता है।

<script type="text/javascript"> 
function countWords() { 
var text = document.getElementById("txtBox1").value; 
if (text.length > 250) text = text.substr(0,250); 
document.getElementById("txtBox1").value = text; 
} 
</script> 

<textarea id="txtBox1" onkeyup="countWords();" >text here</textarea> 
+0

के बारे में इतना यकीन नहीं है कि ड्रैग और ड्रॉप टेक्स्ट को शामिल करने के बारे में क्या कोई ऑनकीप ईवेंट नहीं है, यह काम करेगा? प्लगइन के लिए –

2

साथ ही आप एक ASP.NET सत्यापनकर्ता के साथ ऐसा कर सकते हैं:: यह भी अगर पाठ क्षेत्र में कटौती करने और चिपकाने की वजह से संशोधित किया गया है काम करेंगे

<asp:TextBox ID="MyTextBox" runat="server" TextMode="MultiLine" Rows="4" /> 
<asp:RegularExpressionValidator Display="Dynamic" ID="RegularExpressionValidator1" ControlToValidate="MyTextBox" Text="<p>A maxiumum of 250 characters is allowed.</p>" runat="server" ValidationExpression="^(.|\s){0,250}$" /> 
0
<asp:TextBox 
    onkeypress="return value.length<=10;" 
    onpaste="return (value.length+clipboardData.getData('Text').length)<=10" 
    TextMode="MultiLine" 
    runat="server" 
/> 
3

आप के लिए jQuery का उपयोग कर सकते एक बार

$("#txtQuestions").bind("keyup change blur input paste", function() { 
    // fire this off a few ms after the event happens 
    setTimeout(
    (function(el){ // closure to store "this" as "el" 
    return function() { if (el.value.length>250) el.value.length = 250; } 
    })(this), 10); 
}); 

में कई घटनाओं के लिए बाध्य वहाँ एक library (jQuery.charcounter) वहाँ कि स्वचालित रूप से पात्रों रेम जोड़ देगा है अस्तर और डीओएम के साथ भी नहीं।

+0

+1 :) –

1

@ gnarf के जवाब पर विस्तार:

<textarea class="max-length" cols="30" id="comment-box" maxlength="250" rows="10"></textarea></span> 
<span id="comment-box-chars-left">250</span> characters left 
<script type="text/javascript> 
    function updateCharsLeft(id, maxChars, length) { 
     $('#' + id + '-chars-left').html(maxChars - length); 
    } 

    $(document).ready(function() { 
     $('.max-length').each(function() { 
      updateCharsLeft($(this).attr('id'), $(this).attr('maxLength'), $(this).val().length); 
     }); 

     $('.max-length').bind('keyup change blur input paste', function() { 
      var maxChars = $(this).attr('maxLength'); 

      // fire this off a few ms after the event happens 
      setTimeout((function(el) { // closure to store "this" as "el" 
       return function() { 
        if (el.value.length > maxChars) { 
         el.value = el.value.substring(0, maxChars); 
        } 
        updateCharsLeft(el.id, maxChars, el.value.length); 
       } 
      })(this), 10); 
     }); 
    }); 
</script> 

यह वर्णों की अधिकतम संख्या निर्दिष्ट करने के लिए एक विशेषता का उपयोग करता है, और एक लेबल वर्णों की संख्या को प्रदर्शित करने के साथ-साथ छोड़ दिया अद्यतन करता है। पाठ क्षेत्र को कक्षा अधिकतम लंबाई और तत्व दिया जाना चाहिए जो वर्णित वर्णों की संख्या प्रदर्शित करेगा, उसी आईडी को उसी पाठ क्षेत्र के साथ होना चाहिए जिसमें -र्स-बाएं संलग्न हैं।

संबंधित मुद्दे