我有一个p:dataTable
,它有多个列表示月份值,如下所示:
<p:column width="80" headerText="Januar">
<p:inputNumber value="#{mto.month01}" symbol="€" symbolPosition="s" decimalPlaces="0"
disabled="#{((mto.year eq indexController.currentYear) and (indexController.currentMonth gt 1)) or (mto.year lt indexController.currentYear) or (indexController.isComponentDisabled('fieldPMForecastOutflow', 'PM'))}">
<p:ajax process="@this" partialSubmit="true"
update=":contentform:dt-PMDetail contentform:blockButtonDeletePMYear"
listener="#{indexController.updateWorkingCopyProjectManagementFinancesDTO}" />
</p:inputNumber>
</p:column>
我的用户希望能够将Excel单元格粘贴到此数据表中.
我try 了不同的脚本片段,例如this,并对其进行了如下修改:
$('input').bind('paste', function (e) {
var $start = $(this);
var source
//check for access to clipboard from window or event
if (window.clipboardData !== undefined) {
source = window.clipboardData
} else {
source = e.originalEvent.clipboardData;
}
var data = source.getData("Text");
if (data.length > 0) {
if (data.indexOf("\t") > -1) {
var columns = data.split("\n");
$.each(columns, function () {
var values = this.split("\t");
$.each(values, function () {
$start.val(this);
if ($start.next('input')) {
$start = $start.next('input');
$start.val(this);
}
if ($start.closest('td').next('td').find('input')) {
$start = $start.closest('td').next('td').find('input');
}
else
{
return false;
}
});
$start = $start.closest('td').parent().next('tr').children('td:first').find('input');
});
e.preventDefault();
}
}
});
当我粘贴数据时,货币符号丢失,不进行任何验证(我可以粘贴字母),只要我用鼠标悬停在某个字段上,该值就会重置为其原始值.
我正在寻找的是一个解决方案,‘Tab键’到下一个字段,并像我会通过键盘输入值(例如,只有数字).如果粘贴的列太多,则可以省略它们.EXCEL数据中的新行应该会导致数据表中的新行(如果我在第1行的第4列粘贴了一个3x3表格,则应该填充第1到3行的第4到6列).