zoukankan      html  css  js  c++  java
  • [转]TextArea设置MaxLength属性最大输入值的js代码

    标准的DHTML文档中TEXTAREA的MAXLENGTH属性默认情况下不起作用,只有当事件发生时才起作用 
    如下:http://spiderscript.net/site/spiderscript/examples/ex_textarea_maxlength.asp 
    但TEXT中有且起作用<input type="text" maxlength="20">, 
    那么在TEXTAREA中怎么实现输入内容不能超过多少个字符呢。 
    
    方法1、如果只需要截取多少个字符的内容,则可以: 
    
    
    复制代码 代码如下:
    
    
    <textarea onkeyup="this.value = this.value.slice(0, 80)"></textarea> 
    
    
    或 
    
    复制代码 代码如下:
    
    
    <textarea onkeyup="this.value = this.value.substring(0, 80)"></textarea> 
    
    
    
    方法2、 
    
    复制代码 代码如下:
    
    
    <script type="text/javascript"> 
    function ismaxlength(obj){ 
    var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : "" 
    if (obj.getAttribute && obj.value.length>mlength) 
    obj.value=obj.value.substring(0,mlength) 
    } 
    </script> 
    <textarea maxlength="40" onkeyup="return ismaxlength(this)"></textarea> 
    
    
    这个方法采用截断法,输入到最后一个字符的时候如果再输入则会显示光标闪烁。但可以解决使用CTRL+C复制过来的长度限制问题,但如果用鼠标复制过来的不还是不行。 
    
    方法3、这个方法直接判断输入的长度 
    
    复制代码 代码如下:
    
    
    <script language="javascript" type="text/javascript"> 
    <!-- 
    function imposeMaxLength(Object, MaxLen) 
    { 
    return (Object.value.length <MaxLen); 
    } 
    --> 
    </script> 
    <textarea name="myName" onkeypress="return imposeMaxLength(this, 15);" ></textarea> 
    
    
    当输入内容大于15时因为返回为false所以这个实现不会显示光标闪烁的问题,但没有解决复制过来的长度限制问题即复制过来的内容可以超过最大长度限制 
    return (Object.value.length <=MaxLen);但我测试发现当输入字节数=maxlen时还可以输入一个字符,所以我改成 return (Object.value.length <MaxLen); 
    
    方法4、其实方法4是方法2与方法3的基础上进一步优化。客观的说方法2与方法3都只做了一部分工作 
    
    复制代码 代码如下:
    
    
    <mce:script language="javascript" type="text/javascript"><!-- 
    function textlen(x,y){ 
    var thelength = x.value.length; 
    window.status=thelength+' of '+y+' maximum characters.'; 
    } 
    function maxtext(x,y){ 
    tempstr = x.value 
    if(tempstr.length>y){ 
    x.value = tempstr.substring(0,y); 
    } 
    textlen(x,y); 
    } 
    // --></mce:script> 
    <form name="myform"> 
    <textarea name="mytextarea" 
    cols="45" 
    rows="3" 
    wrap="virtual" 
    onkeypress="return(this.value.length<20)" 
    onkeydown="textlen(this,20)" 
    onkeyup="textlen(this,20)" 
    onblur="maxtext(this,20)" 
    > 
    
    
    上面的方法在原来的基础上加了onblur事件,这主要用于处理当用户不是采用输入而是通过复制粘贴方法来完成文本的转入时的问题。实际就是方法2与方法3的结合版。 以下是我为TextArea增加并利用maxlength属性及结合上例的结果:<html><head><script type="text/javascript">function ismaxlength(obj){var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""if (obj.getAttribute && obj.value.length>mlength)alert('该文本框允许输入最大长度为'+mlength+"个字符,超出内容将会被截断")obj.value=obj.value.substring(0,mlength)}function imposeMaxLength(obj){ var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : "" return (obj.value.length <mlength);}</script></head><body><form name="myform"> <textarea maxlength="5" onkeypress="return imposeMaxLength(this)" onblur="ismaxlength(this)"></textarea></form></body></html> 
    
    Javascript代码 
    --------------------------------------------------------------------------------------------- 
    
    复制代码 代码如下:
    
    
    function SetTextAreaMaxLength(controlId, length) {
        // JScript File for TextArea
        // Keep user from entering more than maxLength characters
        function doKeypress(control, length) {
            maxLength = length;
            value = control.value;
            if (maxLength && value.length > maxLength - 1) {
                event.returnValue = false;
                maxLength = parseInt(maxLength);
            }
        }
        // Cancel default behavior
        function doBeforePaste(control, length) {
            maxLength = length;
            if (maxLength) {
                event.returnValue = false;
            }
        }
        // Cancel default behavior and create a new paste routine
        function doPaste(control, length) {
            maxLength = length;
            value = control.value;
            if (maxLength) {
                event.returnValue = false;
                maxLength = parseInt(maxLength);
                var oTR = control.document.selection.createRange();
                var iInsertLength = maxLength - value.length + oTR.text.length;
                var sData = window.clipboardData.getData("Text").substr(0, iInsertLength);
                oTR.text = sData;
            }
        }
        function doDragenter(control, length) {
            maxLength = length;
            value = control.value;
            if (maxLength) {
                event.returnValue = false;
            }
        }
        function addEvent(elm, evType, fn, useCapture) {
            if (elm.addEventListener) {
                elm.addEventListener(evType, fn, useCapture);
                return true;
            } else if (elm.attachEvent) {
                var r = elm.attachEvent('on' + evType, fn);
                return r;
            } else {
                elm['on' + evType] = fn;
            }
        }
        function AttacheventTextAreaBeforePaste(obj, length) {
            return function() {
                doBeforePaste(obj, length)
            }
        }
        function AttacheventTextAreaPaste(obj, length) {
            return function() {
                doPaste(obj, length)
            }
        }
        function AttacheventTextAreaKeyPress(obj, length) {
            return function() {
                doKeypress(obj, length)
            }
        }
        function AttacheventTextAreaDragEnter(obj, length) {
            return function() {
                doDragenter(obj, length);
            }
        }
        var obj = document.getElementById(controlId);
        addEvent(obj, 'keypress', AttacheventTextAreaKeyPress(obj, length), null);
        addEvent(obj, 'beforepaste', AttacheventTextAreaBeforePaste(obj, length), null);
        addEvent(obj, 'paste', AttacheventTextAreaPaste(obj, length), null);
        addEvent(obj, 'dragenter', AttacheventTextAreaDragEnter(obj, length), null);
    }
    ----------------------------------------------------------------------------------------------- HTML代码 复制代码 代码如下: <asp:TextBox ID="TextBoxAddress" runat="server" Width="200px" TextMode="MultiLine" Height="113px" MaxLength="10"></asp:TextBox> <script language="javascript" type="text/javascript"> SetTextAreaMaxLength('<%=TextBoxAddress.ClientID %>',10); </script>
  • 相关阅读:
    viewController 不响应横竖屏转换相关消息的问题
    nsset排序
    内存相关
    技巧
    IOSTip
    iphone 资源
    IPhone 开发经验教训总结 仅供参考 (转载)
    WIN7控制面板假死
    Firefox添加web浏览端口:此地址使用了一个通常应该用于其他网页浏览的端口
    【WordPress】WXR version error when import into wordpress
  • 原文地址:https://www.cnblogs.com/freeliver54/p/5510938.html
Copyright © 2011-2022 走看看