添加将Excel数据粘贴到Django窗体的function

我目前有一个Django的forms,有N行12列的文本框的形状。 用户可以一次填充这个表单一个文本框:

[________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________ ] [________] [________] [________] [________] [________] [________] [________] [________] [________] [________]

注:该表只显示9列,但我使用的实际forms是12。

我想添加用户在Excel中复制一系列单元格的function,并将其粘贴到填充相应单元格的表单中。

我试图模仿我已经成功创build的方法的语法,它可以在单击窗体上的清除button后清除所有数据字段:

$(document).on("click", "#clear_button", function() { $("input[type=text]").val(""); }); 

来自Excel单行的数据是用制表符分隔的,就我所得到的数据而言:

 $(document).on("paste", "input[type=text]", function(){ var input_id = $(this).attr("id"); var value = $(this).val(); var value_split_array = value.split("\t"); var row_selected = input_id.match(/([-\w]+)_\d+/)[1]; var num = parseInt(input_id.match(/[-\w]+_(\d+)/)[1], 10); for (i=num; i < value_split_array.length-1 || i < 12; i++) { $("[id="+row_selected+"_"+i+"]").val(value_split_array[i-num]); } }); 

我以为这会工作,但不幸的是没有。 想知道如果有人有任何build议。

在将数据粘贴到input字段之前触发粘贴事件,因此无法使用$(this).val()获取粘贴的文本。 您需要访问事件对象的clipboardData属性。

由于jQuery在其事件对象中不包含clipboardData,因此您需要从originalEvent字段中获取它。

你的事件处理程序看起来像这样。

 function (event) { var input_id = $(this).attr("id"); var value; if (event.originalEvent.clipboardData) { // Firefox, Chrome, etc. value = event.originalEvent.clipboardData.getData('text/plain'); } else if (window.clipboardData) { // IE value = window.clipboardData.getData("Text") } else { // clipboard is not available in this browser return; } /* ... */ event.preventDefault(); // prevent the original paste } 

为了更健壮,你应该查询clipboardData,以确保它在继续之前具有文本/纯文本表示。

在IE中,这看起来像是你如何阅读剪贴板。

 var value = window.clipboardData.getData("Text");