关于 Opera,您可以只处理input
事件:
$('textarea').on('input', function() {
if (this.value.length > 255) this.value = this.value.substring(0, 255);
});
小提琴
注意:不支持 IE<=8。从技术上讲,这可以通过 MS 的propertychange
事件进行填充,但是当粘贴到 IE8 文本区域时,这是相当错误的,数字。
刚刚制作了这个稍微粗略的片段来自动填充 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 中测试。
这将自动修补具有maxlength
DOM 属性的文本区域。textarea[maxlength]
您显然可以通过将事件附加到祖先并用作后代选择器来委托事件(如果有动态生成的文本区域) ,例如:
$(document).on(ev, 'textarea[maxlength]', ...)
最后,特性检测被注释掉了,因为 Opera确实在 textareas 上有一个maxLength
属性,它将 html 的值解析为 DOMmaxLength
属性,并且对于没有 的 textareas 具有默认值 ( -1
) maxLength
,只是它显然没有效果在歌剧中。
我找不到正确检测这个 Opera 错误的方法,所以将特征检测部分注释掉了,也就是说,上面的代码将侦听器附加到textarea
s 上,与浏览器是否支持maxLength
. 如果您设法检测 Opera 的错误,请随时编辑答案。虽然这似乎是一个非常本地化的错误,很快就会修复。