从MS Excel复制粘贴失败了IE,但与Firefox一起使用

时间:2012-01-25 18:50:36

标签: php javascript

我使用带有一点Javascript的PHP表单构建了一个非常简单的应用程序。

在我的表单中,我有一个文本输入,我用它来运行数据库搜索。如果我有多个值,我有一些代码在每个值之间加一个逗号。

奇怪的是:

在Firefox中,我可以去做MS Excel,复制5个值并将它们粘贴到文本输入控件中。我可以看到粘贴的所有5个值和中间的逗号。

在Internet Explorer版本8中,我可以进行MS Excel,复制5个值,但只有一个值(第一个数字)被粘贴到文本输入控件中。

这是我的HTML

<fieldset>
<label for="DBRIDs">RIDs</label><input type="text" id="DBRIDs" name="DBRIDs" onchange = "removespaces(this)">
</fieldset>

这是我页面标题中的Javascript

<script language="javascript" type="text/javascript">
function removespaces(which) {
str = which.value;
str = str.replace (/\s|\n/g,",");  // replace space or newline by commas
document.myform.DBRIDs.value = str;
}

非常基本的东西。我错过了什么?为什么IE不能像Firefox一样粘贴?

修改

我有一个错字,所以使用textarea现在正在工作。我可以复制一个列并从IE中粘贴它

当然(讽刺),它引入了一个新问题:它复制了我的逗号,我不清楚它是因为textarea还是我的Javascript。

1 个答案:

答案 0 :(得分:1)

具有文本类型的输入不支持换行符。因此,IE会自动剥离它们,你甚至没有机会解析它们。您最好的选择可能是使用textarea。

或者,您可以执行类似下面的操作,但它实际上只是一种解决方法(请注意onpaste事件):

<fieldset>
<label for="DBRIDs">RIDs</label><input type="text" id="DBRIDs" name="DBRIDs" onchange="removespaces(this)" onpaste="handlePaste(this)">
</fieldset>

和javascript,如:

function removespaces (which) {
    var str = which.value;
    str = str.replace(/\s|\n/g, ","); // replace space or newline by commas
    which.value = str;
}

function handlePaste (which) {  
    var str = window.clipboardData.getData("Text");    
    str = str.replace(/\s|\n/g, ","); // replace space or newline by commas
    which.value = str;
    return false; // kill the paste event so you don't get duplicate data.
}

jsfiddle示例:http://jsfiddle.net/fordlover49/mJ7L3/

在相关的说明中(尝试帮助您避免进一步的问题),您将元素传递给removespaces函数,但硬编码您正在设置的元素,而不是使用传入的元素。