我想将textarea中的字符数限制为255,但仍允许Backspace,Delete,箭头键,Home,End,PgUp等键。我还想允许Ctrl + C,Ctrl + X,Ctrl + V,Ctrl + textarea内的快捷方式。即使通过Ctrl + C或右键单击>粘贴文本,字符数也不应超过255。糊。使用Opera以外的浏览器,我可以简单地使用maxlength
属性,但遗憾的是Opera不支持。
我查看了SO的一些解决方案,但似乎没有一个能够实现我想要的功能。而这些解决方案有点难看,因为其中一些解决方案很难编码许多keyCodes。 (也许这是唯一的方法。)
我该如何解决这个问题?
答案 0 :(得分:2)
关于Opera,您只需处理input
事件:
$('textarea').on('input', function() {
if (this.value.length > 255) this.value = this.value.substring(0, 255);
});
注意:没有IE< = 8支持。这在技术上可以用MS的propertychange
事件进行填充,但是当你在IE8 textarea上粘贴时,这是相当错误的,数字。
刚刚制作了这个略显粗略的片段,以自动填充textareas'maxLength
:
$(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);
});
//}
});
在Opera 12.10和IE8中测试过。
这将自动修补DOM准备好maxlength
属性的textareas。您可以通过将事件附加到祖先并使用textarea[maxlength]
作为后代选择器来委派事件(如果有动态生成的textareas),例如:
$(document).on(ev, 'textarea[maxlength]', ...)
最后,功能检测已被注释掉,因为Opera 确实在textareas上具有maxLength
属性,它还将html的值解析为DOM maxLength
属性如果没有-1
的textareas具有默认值(maxLength
),那么它在Opera中显然没有效果。
我无法找到正确检测此Opera错误的方法,因此功能检测部分已被注释掉,也就是说,上面的代码将监听器附加到textarea
,而与浏览器是否支持{{1}无关。 }}。如果您设法检测Opera的错误,请随时编辑答案。虽然这似乎是一个非常本地化的错误,但很快就会修复。