【问题标题】:Simulate maxlength with Japanese characters for textarea in ie8-用日文字符模拟 ie8 中 textarea 的 maxlength-
【发布时间】:2014-08-28 12:55:13
【问题描述】:

我正在尝试在较低版本的 Internet Explorer(ie8、ie7)中为 textarea 模拟 maxlength 的 HTML5 行为:

 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
 <textarea maxlength="200"></textarea>

 <script type="text/javascript">
 $(document).ready(function() {
    $(document).delegate('textarea[maxlength]', 'keyup paste change', function(e) { 

        var limit = parseInt($(this).attr('maxlength'));  
        var text = $(this).val();  
        var chars = text.length;  

        if(chars > limit){  
            var new_text = text.substr(0, limit);  

            $(this).html(new_text);  
        }  
    });  
});
</script>

问题行为是,如果我输入 201 个日文字符,textarea 将按预期将文本调整为仅显示前 200 个字符,但是当我单击它时 textarea 失去焦点时,textarea 将只显示第 201 个日文字符。如果您输入第 201 个字符作为英文字符,则不会发生此问题。我正在使用 Windows 日文 IME 输入日文字符,以防相关细节。

ETA:我认为现在这是 Javascript 无法与日文 IME 配合使用的问题,但我仍然不知道如何修复它。

【问题讨论】:

  • 使用keypress 事件而不是keyup。此外,您可以在现代浏览器中使用 input 事件和 IE 中的 propertychange 事件来检测对 textarea 的 value 属性的更改。示例:stackoverflow.com/a/14029861/96100
  • 使用 val() 代替 html()

标签: javascript jquery internet-explorer ime double-byte


【解决方案1】:

这种行为几乎可以肯定是由于日语 IME 在触发各种 Javascript 事件后更改了输入。我发现的最佳解决方案是更改上述代码,使其由“模糊”事件触发,因为“模糊”似乎总是在日语 IME 完成编辑后发生。

【讨论】:

    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多