文本区域自动调整大小调整在每一个按键上的铬
Textarea auto resizer resize at every keypress on chrome
我正在实现一个自动文本区域调整器,当用户按ENTER键并在最小scrollHeight大小之后自动扩展文本区域。
它在IE、Firefox和Opera中运行良好,但在Chrome中不行。
在Chrome中,文本区域在任何按键(不只是ENTER)调整大小,因为当设置e.s yle.height时,它也会改变scrollHeight(这不会发生在其他浏览器上)。
我用注释标记了有问题的行:
function resize(e)
{
e = e.target || e;
var $e = $(e);
console.log( 'scrollHeight:'+e.scrollHeight );
console.log( 'style.height:'+e.style.height );
var h = Math.min( e.scrollHeight, $e.data('textexp-max') );
h = Math.max( h, $e.data('textexp-min') );
if( $e.data('h')!=h )
{
e.style.height = "";
e.style.height = h + "px"; //this changes the scrollHeight even if style.height is smaller thatn scrollHeight
//e.style.overflow = (e.scrollHeight > h ? "auto" : "hidden");
$e.data('h',h);
}
return true;
}
完整代码:http://jsfiddle.net/NzTYd/9/
我发现,当我在Firefox/IE/Opera中更新e.style.height
时,e.scrollHeight
被更新为完全相同的值:
例子:设置80px为e.style.height
,设置为80px e.scrollHeight
然而,Chrome更新e.scrollHeight
与更高的值(多4px)。
例如::设置80px为e.style.height
,设置为84px e.scrollHeight
这会导致文本区域每按一次键就增长4px !
你可以在这里找到答案。
Textarea根据内容长度调整大小
好的,我发现webkit有一个bug: http://code.google.com/p/chromium/issues/detail?id=34224
最后我解决了它检测如果e.scrollHeight
只改变了4像素的量,这是铬添加的差异。
如果出现这种情况,我从e.style.height
减去4px来修复它。
几个月前,我用jQuery构建了一个自动扩展的文本区域,并在许多站点上使用它取得了巨大的成功。这并不能直接解决你的问题,但你可能会发现它很有帮助。
如果用户提供@@,则插入一段,并删除额外的换行符。
我有我的文本区设置为每行40个字符。该行每次增加1px以容纳新字符。
你可以在我的网站evikjames.com上看到一个工作的例子> jQuery examples> Expandable Textarea
$(".Expandable").live("keyup", function() {
// ADJUST ROWS ROWS
var ThisText = $(this).val();
var Rows = calculateRows(ThisText);
$(this).attr("rows", Rows);
// CALCULTE COUNTER
var ThisTextMax = $(this).attr("max");
if (ThisText.length > ThisTextMax) {
ThisText = ThisText.substring(ThisText, ThisTextMax);
$(this).val(ThisText);
alert("You have exceeded the maximum allowable text. Revise!");
}
$(this).next(".Count").html(ThisText.length + "/" + ThisTextMax + " characters.");
});
var calculateRows = function calculateRows(String) {
var NumCharacters = String.length;
var NumRows = Math.ceil(NumCharacters/40);
var Match = String.match(/@@/g);
var NumParagraphs = 0;
if (Match != null) {
NumParagraphs = String.match(/@@/g).length;
NumRows = NumRows + NumParagraphs;
}
return NumRows;
}
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 一个接一个地淡出每一个li
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- MongoDB从一组未知子文档中的每一个$slice
- 你如何使 Math.random 数组中的每一个第 9 个元素都是同一个元素?[JavaScript]
- JavaScript:哪个是更好的方法.为每一个或减少
- 如何记录node.js程序中的每一个“抛出”
- 当调整另一个图像的大小时,KineticJS会重新计算图像的位置
- 有没有一种简单的方法来转换“;字体"style属性添加到其中的每一个'他的个人风格
- Javascript-Regex-用不同的字符串替换字符串中的每一个匹配项
- 我应该'使用strict'对于我编写的每一个javascript函数
- jQuery图像大小调整-在一个变量上,并直接给出不同的结果
- knockout.js事件,用于跟踪输入文本框内的每一个文本更改
- 如何简化和加快每一个
- 使用jQuery将一组元素中的每一个克隆到单独的目标元素中
- 一个Chrome扩展,显示随机图片从所选的本地文件夹为每一个新的选项卡
- 文本区域自动调整大小调整在每一个按键上的铬
- 查找每一个"
"在页面中并使用jQuery删除它 - 克隆每一个,附加到每一个
- 如何重新加载浏览器的每一个标签打开我们的网页