美文网首页让前端飞技术干货
实时统计字数--你知道几种

实时统计字数--你知道几种

作者: 张chuner | 来源:发表于2017-02-07 22:05 被阅读0次

    实时统计字数,一个小而常见的功能,每一个方法各有利弊甚至不完善的地方,由简到精列举几个简单布局直接输出的小方法。

    1、onkeydown
    存在问题:键盘按下的时候,当前正在输入的内容,文本框未计数

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            oT1.onkeydown=function(){
                var t1=oT1.value;
                document.wirte=t1.length;
            };
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    2、onkeyup
    存在问题:如果按键一直按下,文本框不计数

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            oT1.onkeyup=function(){
                var t1=oT1.value;
                document.wirte=t1.length;
            };
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    3、onkeyup=onkeydown
    存在问题:开始时,按键一直按下的时候有一点卡顿

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            oT1.onkeyup=oT1.onkeydown=function(){
                var t1=oT1.value;
                document.wirte=t1.length;
            };
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    4、oninput
    存在问题:IE9 删除有问题 删除时value长度不改变,清空后才变为0; iE8- 没有此方法

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            oT1.oninput=function(){
                var t1=oT1.value;
                document.wirte=t1.length;
            };
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    5、onpropertychange
    存在问题:兼容 IE系列,但是IE9 删除有问题

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            oT1.onpropertychange=function(){
                var t1=oT1.value;
                document.wirte=t1.length;
            };
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    6、oT1.oninput=oT1.onpropertychange
    存在问题:IE9删除有问题

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            oT1.onpropertychange=oT1.onkeydown=function(){
                var t1=oT1.value;
                document.wirte=t1.length;
            };
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    7、定时器、onfocus、onblur
    存在问题:定时器性能不好

    <script>
        window.onload=function(){
            var oT1=document.getElementById('t1');
            var timer=null;
            oT1.onfocus=function(){
                timer=setInterval(function(){
                    document.title=oT1.value.length;
                },30);
            };
            oT1.onblur=function(){
                clearInterval(timer);
            }
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    8、定时器(IE9)、oT1.oninput=oT1.onpropertychange

    <script>
        window.onload=function(){
           var oT1=document.getElementById('t1');
            if(navigator.userAgent.indexOf('MSIE 9.0')!=-1){
                var timer=null;
                oT1.onfocus=function(){
                    timer=setInterval(function(){
                        document.title=oT1.value.length;
                    },30);
                };
                oT1.onblur=function(){
                    clearInterval(timer);
                }
            }else{
                oT1.onpropertychange=oT1.oninput=function(){
                    var t1=oT1.value;
                    document.title=t1.length;
                };
            }
        };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>
    

    如果考虑字节问题,添加一“增强版”

    <script>
       window.onload=function(){
        var oT1=document.getElementById('t1');
        function count(){
            var t1=oT1.value;
            var n=0;
            for(var i=0;i<t1.length;i++){
                //内容对应的编码 0x4e00~0x9fa5 汉字范围
                //utf-8一个汉字占三个字节 gb2312一个汉字占两个字节
                if(t1.charCodeAt(i)>='0x4e00' && t1.charCodeAt(i)<='0x9fa5'){
                    n+=3;
                }else{
                    n++;
                }
            }
            document.write=n;
        }
        if(navigator.userAgent.indexOf('MSIE 9.0')!=-1){
            var timer=null;
            oT1.onfocus=function(){
                timer=setInterval(function(){
                    count(); 
                },30);
            };
            oT1.onblur=function(){
                clearInterval(timer);
            }
        }else{
            oT1.onpropertychange=oT1.oninput=function(){
                count();        
            };
        }
    };
    </script>
    <body>
        <input type="text" name="" id="t1"/>
    </body>

    相关文章

      网友评论

        本文标题:实时统计字数--你知道几种

        本文链接:https://www.haomeiwen.com/subject/rximittx.html