Javascript 如何在Opera中对textarea强制执行maxlength,但允许修改

Javascript 如何在Opera中对textarea强制执行maxlength,但允许修改,javascript,jquery,textarea,opera,Javascript,Jquery,Textarea,Opera,我希望将文本区域中的字符数限制为255个,但仍允许使用诸如退格、删除、箭头键、主键、结束键、PgUp等键。我还希望允许在文本区域中使用Ctrl+C、Ctrl+X、Ctrl+V、Ctrl+a快捷键。即使使用Ctrl+C或右键单击>粘贴粘贴文本,字符数也不应超过255。对于Opera以外的浏览器,我可以简单地使用maxlength属性,但不幸的是,Opera不支持该属性 我研究了SO的一些解决方案,但似乎没有一个能够完全实现我想要的。这些解决方案有点难看,因为它们中的一些硬编码了许多关键代码。(也许

我希望将文本区域中的字符数限制为255个,但仍允许使用诸如退格、删除、箭头键、主键、结束键、PgUp等键。我还希望允许在文本区域中使用Ctrl+C、Ctrl+X、Ctrl+V、Ctrl+a快捷键。即使使用Ctrl+C或右键单击>粘贴粘贴文本,字符数也不应超过255。对于Opera以外的浏览器,我可以简单地使用
maxlength
属性,但不幸的是,Opera不支持该属性

我研究了SO的一些解决方案,但似乎没有一个能够完全实现我想要的。这些解决方案有点难看,因为它们中的一些硬编码了许多关键代码。(也许这是唯一的办法。)


我应该如何解决这个问题?

关于Opera,您只需处理事件:


注:不,这是一个很好的答案。处理输入事件非常有效。非常感谢您抽出时间。
$('textarea').on('input', function() {
    if (this.value.length > 255) this.value = this.value.substring(0, 255);
});
$(function() {
    var helper = document.createElement('textarea');
    //if (!('maxLength' in helper)) {
        var supportsInput = 'oninput' in helper,
            ev = supportsInput ? 'input' : 'propertychange paste keyup',
            handler = function() {
                var maxlength = +$(this).attr('maxlength');
                if (this.value.length > maxlength) {
                    this.value = this.value.substring(0, maxlength);
                }
            };

        $('textarea[maxlength]').on(ev, supportsInput ? handler : function() {
            var that = this;
            setTimeout(function() {
                handler.call(that);
            }, 0);
        });
    //}

});
$(document).on(ev, 'textarea[maxlength]', ...)