我有一个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列).

推荐答案

不是直接将值写入组件的输入字段,而是使用小部件API并使用其setValue函数来设置值.

从文档中:

将此输入数字小工具的值设置为给定值.确保数字格式正确.

Javascript相关问答推荐

设置默认值后动态更新japbox或调色板

将数据从strapi提取到next.js,但响应延迟API URL

为什么从liveWire info js代码传递数组我出现错误?

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

硬币兑换运行超时

仅针对RTK查询中的未经授权的错误取消maxRetries

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

使用原型判断对象是否为类的实例

如何在Node.js中排除导出的JS文件

如何在 Select 文本时停止Click事件?

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

为列表中的项目设置动画

处理TypeScrip Vue组件未初始化的react 对象

react -原生向量-图标笔划宽度

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

如何使用Cypress在IFRAME中打字

需要刷新以查看Mern堆栈应用程序中的更改

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?