捕捉IE下鼠标右键paste事件

Author : lovecicy

背景:IE8,jQuery

这次碰到的问题是,一个有边框的div套着一个起始宽度为30px的无边框文本输入框,随着用户的输入,输入框的长度也会随之改变。解决的办法是给输入框绑定事件,当用户输入事件触发时调用函数改变输入框的宽度。函数中判断输入框中内容是否和之前一样,如果一样则返回;不一样则改变宽度。

需要处理的情形:键盘输入,失去焦点,键盘粘贴,鼠标右键粘贴。
绑定的事件有:keyup,keydown,blur, update,change,input和paste。

这些事件能够基本保证在IE8,FF和Chrome下面对文本框宽度的控制。但是在IE8下,鼠标右键粘贴时会触发paste事件,但是在触发事件时输入框中内容还没有改变,所以函数会直接返回,不会改变输入框的宽度,之后输入框中的内容会被改变。但是在键盘粘贴时不会发生这种情况。

为了解决这个问题,我将绑定事件的回调函数改为一个function,在function中使用setTimeout调用改变输入框宽度的函数,延时为10ms,结果问题就解决了。

大致代码如下:

$('#inputBox').bind('paste', function (e) {
    setTimeout(changeInputWidth, 10);
});

function changeInputWidth() {
    //code to judge content in input and change input width
}

http://stackoverflow.com/a/4623268/1682256

standard

Have your say