2013-10-28 69 views
1

我有一些JavaScript,基本上听取了特定输入文本元素上的“粘贴”事件。我通过jQuery做了这个事件绑定。现在,在以前的IE版本中,事情效果很好。IE11将剪贴板数据粘贴到输入元素烦恼

但升级到IE11后,行为是不同的。

场景: 我正在复制和粘贴由CR和LF(电子表格中的多行)分隔的多个关键字。在JavaScript中,在“粘贴”事件处理程序中,我读取剪贴板数据并将所有CR/LF字符转换为单个逗号,然后将此转换后的数据字符串设置回剪贴板。再次,这在以前的IE版本中工作得很好。

IE11中的行为如下: 粘贴时,“粘贴”事件处理程序确实被调用,并且我提到的所有事情都发生了。不幸的是,输入元素中的粘贴结果仍然没有正确格式化。随后的粘贴会显示正确的逗号分隔字符串(因为我在处理程序中做的最后一件事是将转换后的字符串设置为剪贴板)。

问题: 我是否正确处理这个粘贴事件处理程序? 同样,我正在处理粘贴事件,转换剪贴板数据,然后将转换的数据设置回剪贴板。在以前的IE版本中,这在第一次粘贴时有效。但在IE11中,转换后的数据字符串将粘贴到第一个粘贴后的任何粘贴事件上。

下面是函数:

$("input").bind("paste", function (e) { 
     // for multi rows of spreadsheet data. 
     // format so that new line & carriage return are converted into a comma. 
     var rawText = window.clipboardData.getData("text"); 
     var delimitedText = rawText.replace(/\r\n/g, ', '); 
     window.clipboardData.setData("text", delimitedText); // this is why subsequent pasting works fine. 
}); 

十分赞赏。

回答

1

我解决了这个问题,从其他职位寻找类似的问题。 解决方法是使用setTimeout,超时时间为100 ms。 设置这种方式使它像魅力一样工作。