input
Operaに関しては、イベントを処理できます:
$('textarea').on('input', function() {
if (this.value.length > 255) this.value = this.value.substring(0, 255);
});
フィドル
注: IE<=8 はサポートされていません。これは技術的には MS のpropertychange
イベントと合わせることもできますが、IE8 のテキストエリアや図に貼り付けるとかなりバグがあります。
テキストエリアを自動的にシムするために、この少し粗いスニペットを作成しました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 Readyの属性を持つテキストエリアに自動的にパッチが適用されます。イベントを祖先にアタッチしtextarea[maxlength]
、子孫セレクターとして使用することで、明らかにイベントを委任できます (動的に生成されたテキストエリアがある場合)。
$(document).on(ev, 'textarea[maxlength]', ...)
最後に、Operaにはtextareasのプロパティがあるため、機能検出はコメント アウトされていmaxLength
ます。html の値を DOMmaxLength
プロパティに解析し、textareas のデフォルト値 ( -1
) を持たないためmaxLength
、明らかに効果がありません。オペラで。
この Opera バグを適切に機能検出する方法が見つからないため、機能検出部分はコメント アウトされていtextarea
ますmaxLength
。Opera のバグを機能的に検出できた場合は、自由に回答を編集してください。これは非常に局地的なバグのようですが、すぐに修正される予定です。