javascript - <textarea> 字符限制

标签 javascript html textarea maxlength

使用纯 JavaScript 设置文本区域中最大字符数的跨浏览器方式是什么? maxlength 不适用于 Opera 和 IE9 及以下版本的文本区域(尽管它适用于所有主要浏览器的输入)。

一旦达到字符限制,文本区域不应允许输入更多字符。使用 Ctrl+V 或右键单击上下文菜单粘贴的文本应在字符限制处被 chop 。这意味着解决方案仅使用 onkey___事件还不够。

最佳答案

生成函数,在您的条件下 chop 或阻止事件,然后将它们添加为所有不同的监听器您感兴趣的事件。

function snip(len) {
    return function (e) {e.target.value = e.target.value.slice(0, len);};
}
function prevent(len) {
    return function () {
        if (e.target.value.length >= len) {
            e.preventDefault();
            return false;
        }
    };
}

var len = 5; // choose your length however you want

var textarea = document.getElementById('texta'), // get the node
    trunc = snip(len),
    prev1 = prevent(len),
    prev2 = prevent(len - 1);

textarea.addEventListener('change'  , trunc, true);
textarea.addEventListener('input'   , trunc, true);
textarea.addEventListener('keydown' , prev2, true);
textarea.addEventListener('keypress', prev2, true);
textarea.addEventListener('keyup'   , prev1, true);
textarea.addEventListener('paste'   , trunc, true);

在 IE 中,事件可能需要以不同的方式附加

DEMO

关于javascript - <textarea> 字符限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421568/

相关文章:

html - 为什么在 HTML5 中使用括号表示法?

jquery - 将 Bootstrap 按钮放置在 Bootstrap div 内

html - ionic 3 移动应用程序视频自动播放和暂停滚动像 facebook 视频

jquery - jquery中文本区域自动调整大小

javascript - 访问 javascript 中的内部函数

javascript - 如何通过使用 CSS 将 Canvas 用作 mask 来在覆盖的 div 上打洞

Javascript:在 html textarea 和 nicedit 之间切换时出现问题

html - 无法更改文本区域的宽度

javascript - 使用 AWS SDK for JavaScript 访问 AWS S3

php - 将 thisValue 从 Javascript 传递到 PHP 文件