限制Textarea不接受250个字符

时间:2009-06-19 06:49:31

标签: c# .net asp.net javascript html

我在C#中有一个textarea,请看下面的代码:

<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>

现在我想要textarea不应该接受超过250个字符,无论用户做什么COPY&amp; PASTE,通过WRITING和DRAG&amp; DROP等,如果用户试图复制或拖动&amp;删除超过250个字符的前250个字符应该在textarea中复制。我知道TEXTAREA中没有MAXLENGTH属性。如果使用.NET无法使用javascript或Jquery的解决方案。

请帮忙

7 个答案:

答案 0 :(得分:3)

您必须为事件连接函数

您想要执行此操作的区域的onpaste,onkeyup和onfocus。

对于asp文本框,我认为你必须只考虑OnTextChanged事件。

对于textarea

<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文本框用于显示剩余的字符。

答案 1 :(得分: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),它会自动添加剩余的字符,也不会添加到DOM中。

答案 2 :(得分: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}$" />

答案 3 :(得分:1)

1)一个非常简单的方法是从onChange事件开始:

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

这里的主要缺点是textarea在焦点离开textarea之前不会更新。

2)您应该能够将上述示例调整为在表单的onSubmit事件上触发的表单验证函数。

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

3)如果你想在服务器端进行这种验证,你真的只需要得到textarea的值并截断它。

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

答案 4 :(得分: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>

这使用一个属性来指定最大字符数,并更新显示剩余字符数的标签。必须为文本区域指定类max-length,并且显示剩余字符数的元素必须与附加了-chars-left的相应文本区域具有相同的id。

答案 5 :(得分:0)

对于交互式反馈,您应该在javascript中执行上述操作,因为有线控件在发回服务器之前不会做出反应(需要重新加载页面)。如果您在每次击键时更新字符数,这可能会导致相当多的服务器负载。

下面是一个粗略的js实现,它将简单地计算每次更改时的ASCII字符数。如果textarea由于剪切和粘贴而被修改,这也将起作用:

<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>

答案 6 :(得分:0)

<asp:TextBox
    onkeypress="return value.length<=10;"
    onpaste="return (value.length+clipboardData.getData('Text').length)<=10"
    TextMode="MultiLine"
    runat="server"  
/>