有时候在输入框输入文字时有字数限制,在将达到限制前,输入不了中文,原来是你输入拼音的时候,把字母也统计进去了。

 var isCh = false; //用来标识当前输入是否在用输入法输入汉字;
    var ct = document.getElementById('count');
    ct.addEventListener('keydown', function (e) {
        console.log(e)
        e.keyCode === 229 && (isCh = true);
        //keydown事件的触发:如果keyCode为229,则说明用户正在使用输入法敲入汉字;
    ct.addEventListener('keyup', function (e) {
        if (e.keyCode === 32 && isCh) {
            //keyup事件会真实获取keyCode,当用户正在敲入汉字,而且用户输入了空格,键入了汉字,则获取此时的长度;
            isCh = false;
            console.log( e.target.value.length);
        } else if (!isCh) {
            //当用户没有借助输入法,则可直接获取字数
            console.log( e.target.value.length);
                                    文章目录HTMLJavaScript
<input maxlength="15" type="text" onkeydown="onkeydown_(event);" onkeyup="onkeyup_(event,thisObj);">
JavaScript
	//用来判断现在是输入汉字还是字母
    var isChinese = false;
                                    当我们在监听input、textarea中的文字数,总会把输入拼音的状态也监听到,这会使统计的文字数量不完全准确,而且会更加频繁的向后台请求接口,于是就想着把输入拼音的状态给过滤掉。
<div class="title">
  <p>消费承诺</p>
  <span><i>0</i>/1000</span>
<div class="content">
  <textarea 
                                    使用ATmega32编写交直流双电源无缝切换,输入过欠压保护,输出过流保护。主要使用了单片机自带的比较器功能,比较器的一端使用了LT431制作的2.5V基准源。
--------------------------------------------------
#include "iom32v.h"
#define  WDR() asm("WDR")
#define  NOP() asm("NOP")
unsigned char dcovervoltage_flag=0,acovervo...
 * 写mac地址的候有限制只能输入字母字
$('#macValList>input').bind('input propertychange',function () {
    //限制mac只能输入字和字母
    var c=$(this);
    if(/[^\w]/.test(c.val())) {
        //当输入字和字母候用'...
该输入框仅可输入汉字字母字
<input id=“inputId” onkeyup=" this.value=this.value.replace('/[^\u4e00-u9fa5\da-zA-Z]/g', '') "/>
在输入中文,对应的拼音也会填写到输入框中
中文状态下字母输入也触发keyup事件,导致input输入框的值发生了改变
                                    背景前端开发中往往有如下需求限制前端文本框(textfield,input,textarea,div)等的输入字数,可以参考新浪微博。但是这里有个问题,当我们使用中文输入法候,我们输入zheshishenm这段拼音会导致占用字数为11,当我们使用确认中文这是什么后其占用字数又变为4。假设我们需求当用户输入超过20个字的候截断其输入,并实的显示剩余字数,如图: 
那我们该怎么实现呢?方案一
                                    $("#field10602").keyup(function() {
	$("#field10602").val($("#field10602").val().substring(0,10));