有这么个页面,会实时检验输入字符,在英文输入法状态下工作正常,但是开启搜狗输入法的时候,就不行了,不知道如何解决。<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function checkCharValid(appendCharCode){
    var rg = /^[^\x00-\x1F\x21-\x2C\x3A-\x40\x5B-\x60\x7B-\x7Foi]{0,6}$/i;
    var eu = $("#sNote");
    var nw = $("#notifyWords");
    nw.hide();
    var s = eu.val();
    if(appendCharCode) s += String.fromCharCode(appendCharCode);
    var b = rg.test(s);
    if(!b){
        nw.show("slow");
    }
    return b;
}
</script><div>
    <textarea id="sNote" name="sNote" class="box" cols="30" rows="2"
        onkeypress="event.returnValue=checkCharValid(event.keyCode)"
        onchange="alert(checkCharValid())"></textarea>
    <span id="notifyWords" style="display:none;align:right;width:500px;overflow:float;color:red;">
        注意:<br>
        &nbsp;&nbsp;&nbsp;&nbsp;允许最多6个字母、数字、汉字(及其它多字节文字符号)<br/>
        &nbsp;&nbsp;&nbsp;&nbsp;禁止使用控制字符<br/>
        &nbsp;&nbsp;&nbsp;&nbsp;禁止大小写的英文 O o I i <br/>
        &nbsp;&nbsp;&nbsp;&nbsp;禁止 ' " ! # $ % &amp; * + , : ; &lt; = &gt; \ ? @ [ \ ] ^ _ ` { | } ~ 等半角字符
    </span>
</div>

解决方案 »

  1.   

    这个要兼容所有浏览器是非常复杂的,所有基本上可以当做“无解”。况且输入法又是个特殊情况,貌似在输入内容最终上屏之前,浏览器是没法捕获其状态的,或许有办法而我现在不知道。建议这类非关键非必要功能支持一般情况就够了,不必考虑的太复杂。ps: 如果你想做的“完美”的话,IE中有onpropertychange事件,FF中有watch方法可以监测属性变化,其它诸如剪切粘贴拖拽等操作甚至都要考虑。