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