粘贴一大块文本时,文本输入不会扩展

时间:2012-06-22 08:34:26

标签: jquery

我有一个初始大小的文本输入,比如说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选择整个文本并点击退格键,大小减小到原始大小同时所有文本消失。谁能解释为什么会这样?当粘贴一大块文本时,如何同时自动扩展?

4 个答案:

答案 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)

另一个技巧,可能是更多交叉兼容,是用计时器触发检查。