我有一个初始大小的文本输入,比如说2.我想要的是当我输入时,大小应该同时扩展(由于文本输入的边框可见),并且当用户按下时同时减小退格/删除以删除字符。我正在尝试使用此代码:
$("input").live("mouseup mousedown keyup keydown",function() {
x = parseInt($(this).attr('size'));
y = $(this).val().length;
z = x > y ? y : x;
$(this).attr('size',z+2);
});
现在,当用户一次键入一个字符或按下字符键并保持按下时,此代码的工作方式与预期一致。当我从某处复制一大块文本,关注文本输入并通过CTRL-V粘贴到其中,或者右键单击并选择粘贴选项时,会出现问题。我用45 W的串测试它。会发生什么是文本输入只会扩展一点并保持这种方式(因此只显示几个W)。直到我点击它,它扩展了一点。随后进行2或3次点击以扩展它,然后最终扩展到完整尺寸。另一个古怪的事情是反过来不正确,当我专注于输入时,执行CTRL-A选择整个文本并点击退格键,大小减小到原始大小同时所有文本消失。谁能解释为什么会这样?当粘贴一大块文本时,如何同时自动扩展?
答案 0 :(得分:1)
您可以尝试使用'editable'div
,如下所示:
CSS :
div.input{
display:inline-block;
border:1px solid;
background-color:white;
}
标记:
<div class="input" contentEditable="true">Type here...</div>
演示 - &gt; here
答案 1 :(得分:0)
而不是.live("mouseup mousedown keyup keydown")
我将使用.change()
事件,它以相同的方式工作,并且可能也会捕获CTRL + V更改。
答案 2 :(得分:0)
使用事件 propertychange
(IE)和 input
(其他)代替。
答案 3 :(得分:0)
另一个技巧,可能是更多交叉兼容,是用计时器触发检查。