【问题标题】:Copy-Paste from MS Excel fails with IE but works with Firefox从 MS Excel 复制粘贴在 IE 中失败,但在 Firefox 中有效
【发布时间】:2012-01-27 05:28:58
【问题描述】:

我使用带有一点 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怎么不能像火狐一样粘贴??

编辑

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

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

【问题讨论】:

    标签: php javascript


    【解决方案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 函数,但硬编码您正在设置的元素,而不是使用传入的元素。

    【讨论】:

    • 没有变化。通过将 textinput 更改为 textarea 或添加您的函数。我能够从 Firefox、Chrome、Safari 甚至 Opera 毫无问题地粘贴! IE 是不行的。
    • 你可能需要为你的问题创建一个 jsfiddle。我能够使用上面的 jsfiddle 粘贴到 IE8 和 IE9 中并且效果很好。
    • 我有一个错字,所以现在使用 textarea 可以正常工作。我可以从 IE 粘贴,但它引入了一个新问题:它重复了我的逗号。
    • 更新你的正则表达式,现在你正在替换每个匹配的字符。添加+ 说明符(没有理由单独使用\n)。试试str.replace(/\s+/g, ",")
    • 在我的代码中添加了 slice 方法,所以最后一个逗号会像 function removespaces (which) { var str = which.value; str = str.replace(/\s+/g, ","); var newStr = str.slice(0, -1) which.value = newStr; } 一样被删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多