我想出了一些类似于Shadow Wizard的工作,它使用oninput
检测所有形式的输入(如粘贴,拖放),而不仅仅是键盘输入。它要求关闭textarea的滚动条与下面的CSS:
textarea { overflow: hidden; }
您可能需要设置resize: none;
像火狐4和Chrome浏览器。此外,如果没有空格,Opera的包装不会中断,但它不能正确支持word-wrap: word-break;
,所以我不确定你会如何解决此问题。JavaScript的涉及每次改变时间记住textarea的内容,如果文本超出元素的大小,改变回复到以前的值:
var prev = "",
tArea = document.getElementById("limit");
// Need to use onpropertychange event for IE8 and lower
if ("onpropertychange" in tArea && !("oninput" in tArea)) {
tArea.onpropertychange = function() {
// Only run code if value property changes
if (window.event.propertyName == "value")
this.oninput();
}
}
// oninput will fire for all types of input, not just keyboard
tArea.oninput = function() {
// Temporarily remove the onpropertychange event to prevent a stack overflow
var opc = this.onpropertychange;
this.onpropertychange = null;
// Revert value if the text exceeds the size of the box
if (this.scrollHeight > this.offsetHeight) {
this.value = prev;
}
prev = this.value;
if (opc)
this.onpropertychange = opc;
}
工作演示:http://jsfiddle.net/37Jnn/ - 在测试Firefox 4,IE8,Chrome 9,Opera 10.
`onkeyup`对于这类事情来说是一个糟糕的方法。它使得它非常笨重(例如,尽量保持你的手指在钥匙上)。而且,在Chrome 9中,删除的字符太多。 – 2011-02-10 09:52:10
@安迪是的,但仍然是最小代码的工作。 – 2011-02-10 10:07:42