0

[[再次更新]] 如果这个问题变得冗长,我很抱歉。

我是一名业余编码员,我正在寻求有关 javaScript 中的语法和功能的帮助,这将允许复制的分隔符(例如“\t”和“\n”)以<input>在线形式跳过适当的 's。

我想我现在大约 33% 在那里(再次:爱好编码 - 自学想要成为)

<script type="text/javascript">
function splitInput()
{   
var x=document.forms["simpleForm02"]["dataInput_0"].value;
var delimiterT = x.split("\t");
var delimiterN = x.split("\n");

for (var i=0;i<delimiterT.length;i++)
if (x.indexOf("\t") >-1)
{
document.getElementById("dataInput_" + i ).value = (delimiterT[i]);
}

else
for (var i=0;i<delimiterN.length;i++)
if (x.indexOf("\n") >-1)
{
document.getElementById("dataInput_" + (i * 3) ).value = (delimiterN[i]);
}

}
</script>
<form name="simpleForm02">
<table>
<tr>
<th>Color</th>
<th>Model</th>
<th>Qty</th>
</tr>
<tr>
<td><input class="colorInput" id="dataInput_0" name="colorInput_row_1" value="" onKeyUp="splitInput()"></td>
<td><input class="modelInput" id="dataInput_1"  name="modelInput_row_1" value="" onKeyUp=""></td>
<td><input class="qtyInput" id="dataInput_2"  name="qtyInput_row_1" value="" onKeyUp=""></td>
</tr>
<tr>
<td><input class="colorInput" id="dataInput_3" name="colorInput_row_2" value="" onKeyUp=""></td>
<td><input class="modelInput" id="dataInput_4"  name="modelInput_row_2" value="" onKeyUp=""></td>
<td><input class="qtyInput" id="dataInput_5"  name="qtyInput_row_2" value="" onKeyUp=""></td>
</tr>
<tr>
<td><input class="colorInput" id="dataInput_6" name="colorInput_row_3" value="" onKeyUp=""></td>
<td><input class="modelInput" id="dataInput_7"  name="modelInput_row_3" value="" onKeyUp=""></td>
<td><input class="qtyInput" id="dataInput_8"  name="qtyInput_row_3" value="" onKeyUp=""></td>
</tr>
</table>
</form>

这段代码有点工作,以一种有限的方式。如果我复制并排对齐的三个 excel 单元格并将其粘贴到<input class="colorInput" id="dataInput_0" name="colorInput_row_1" value="" onKeyUp="splitInput()">中,则脚本会正确拆分并将三个单元格的内容粘贴到前三个输入中。

但是,我显然在脚本中存在缺陷,因为它根本无法识别 '\n' 分隔符。而且我也知道我在这种情况下存在编码问题:将代码相对地应用于所有单元格,而不仅仅是["dataInput_0"].

假设我在 Excel 工作表中有以下数据:

Excel 中简单数据集的屏幕截图

我试图找到这样的功能,如果我复制上面的 Excel 示例数据,它将覆盖/写入示例中输入的前 6 个<form name="simpleForm">

对不起,啰嗦了。

4

1 回答 1

0

所以,这个问题已经提出了大约一个星期,在此期间我一直在寻找想法和帮助。

具有最大潜力但不是完整解决方案的解决方案是通过以下代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
    <script>
         function splitInput() {
             var x = document.forms["simpleForm02"]["dataInput_0"].value;
             if (x.indexOf('\t') > 0) {
                 var delimiterT = x.split('\t');
                 for (var i = 0; i < delimiterT.length ; i++)
                    document.getElementById("dataInput_" + i).value = (delimiterT[i]);
             }
             else
                if (x.indexOf('\n') > 0) {
                     var delimiterN = x.split('\n');
                     var j = 0;
                     for (var i = 0; i < delimiterN.length ; i++) {document.getElementById("dataInput_" + j).value = (delimiterN[i]);
                         j += 4;
                     }
                 }
                 else
                     return false;
         }   
         function classFocused() {
            var d = document.getElementById("dataInput_0");
            d.className = d.className + " InFocus";
         }   
         function classBlured() {
            var d = document.getElementById("dataInput_0");
            d.className = "inputArea";
         }       
    </script>
    <form name="simpleForm02">
        <table>
            <tr>
                <th>Color</th>
                <th>Model</th>
                <th>Qty</th>
                <th>Cost</th>
            </tr>
            <tr>
                <td>
                    <textarea data-id="0" class="inputArea colorInput" id="dataInput_0" name="colorInput_row_1" onFocus="classFocused();" onBlur="classBlured();" onKeyUp="splitInput();"></textarea>
                </td>
                <td>
                    <textarea data-id="1" class="inputArea modelInput" id="dataInput_1" name="modelInput_row_1" onkeyup="" ></textarea></td>
                <td>
                    <textarea data-id="2" class="inputArea qtyInput" id="dataInput_2" name="qtyInput_row_1" onkeyup="" ></textarea></textarea></td>
                <td>
                    <textarea data-id="3" class="inputArea costInput" id="dataInput_3" name="costInput_row_1" onkeyup="" ></textarea></td>

            </tr>
            <tr>
                <td>
                    <textarea data-id="4" class="inputArea colorInput" id="dataInput_4" name="colorInput_row_2" onkeyup="splitInput()" ></textarea></td>
                <td>
                    <textarea data-id="5" class="inputArea modelInput" id="dataInput_5" name="modelInput_row_2" onkeyup="" ></textarea></td>
                <td>
                    <textarea data-id="6" class="inputArea qtyInput" id="dataInput_6" name="qtyInput_row_2" onkeyup="" ></textarea></td>
                <td>
                    <textarea data-id="7" class="inputArea costInput" id="dataInput_7" name="costInput_row_2" onkeyup="" ></textarea></td>
            </tr>
            <tr>
                <td>
                    <textarea data-id="8" class="inputArea colorInput" id="dataInput_8" name="colorInput_row_3" onkeyup="splitInput()" ></textarea></td>
                <td>
                    <textarea data-id="9" class="inputArea modelInput" id="dataInput_9" name="modelInput_row_3" onkeyup="" ></textarea></td>
                <td>
                    <textarea data-id="10" class="inputArea qtyInput" id="dataInput_10" name="qtyInput_row_3" onkeyup="" ></textarea></td>
                <td>
                    <textarea data-id="11" class="inputArea costInput" id="dataInput_11" name="costInput_row_3" onkeyup="" ></textarea>
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

在上面的 textarea 示例中,如果存在 '\t' 定界符,则进行拆分,并且数据将分布在数据继承长度的过程中。

此外,在上面的文本区域示例中,如果存在 '\n' 分隔符,则进行拆分,并且数据将垂直分布在数据继承长度的过程中。声明:“j += 4”本质上是表单中的列数。

虽然我仍然需要它在所有文本区域输入中工作,而不仅仅是标识为 ["dataInput_0"]。一个 jQuery $(this) 标识符可能吗?

此外,编码是有限的,因为如果您复制和粘贴同时具有 \t 和 \n 的单元格,那么代码将不起作用。

但这是朝着正确方向迈出的一步。

于 2013-04-20T13:52:36.663 回答