javascript - 在 rowEdit ajax 事件中获取 rowIndex

标签 javascript jquery jsf primefaces datatable

我有一个可编辑的数据表(行编辑模式)。当我编辑行并单击勾选以确认新值时,我想使用 jqxvalidator 验证某些列(其中一些是必需的)。因此,当单击勾号时, validateRule(#{rowIndex}); 函数应该验证刚刚编辑的行,但传递给该函数的 rowIndex 值是 未定义

还有其他方法可以获取行索引并将其传递给 JavaScript 函数吗?

我的一些 xhtml 代码:

<p:dataTable id="tblRule" var="item" value="#{bean.ruleList}" binding="#{bean.dtRules}" editable="true"
    editMode="row" rowIndexVar="rowIndex" widgetVar="tblRuleWidget">
    <p:ajax event="rowEdit" listener="#{bean.doEdit}" update="tblRule" onstart="validateRule(#{rowIndex}); " />
    <p:ajax event="rowEditCancel" onstart="hideValidatorMsg();" />

    <p:column>
        <p:rowEditor />
    </p:column>
    <p:column id="colRuleId" headerText="Id" >
        <h:outputText value="#{item.id}" />
    </p:column>
    <p:column id="colRuleCode" headerText="Code">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{item.code}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="inRuleCode" value="#{item.code}" onblur="hideValidatorMsg(); validateRule(#{rowIndex});" />
            </f:facet>
        </p:cellEditor>
    </p:column>
</p:dataTable>

JavaScript:

function validateRule(rowIdx) {
    var namespace = 'view' + $('[id$=hidNamespace]').val();

    $('#' + namespace + '\\:form1').jqxValidator({
        animation : 'none',
        scroll : false,
        arrow : false,
        rules : [ {
            input : '#' + namespace + '\\:form1\\:tabView\\:tblRule\\:' + rowIdx + '\\:inRuleCode',
            message : 'Required field!',
            action : 'blur',
            position : 'top',
            rule : 'required'
        } ]
    });

    if ($('#' + namespace + '\\:form1').jqxValidator('validateInput', '#' + namespace + '\\:form1\\:tabView\\:tblRule\\:' + rowIdx + '\\:inRuleCode') === false) {
        return false;
    } else {
        return true;
    }
}

最佳答案

在之前的方法中,您不会获得 rowIndex,ajax 事件已注册一次,因此 rowIndex 不会像循环一样传递,或者每行一个按钮的actionListener!

适用于 PrimeFaces 5.2 和 <

rowIndex作为数据存储在行中,dataTable 完全依赖于这种方法。

也就是说,根据 Widget 的源代码,以下是获取触发器索引的方法:

PF('dataTableWV').getRowMeta($(event.target).closest('tr')).index

基本上,event.target 是 ✓ 图标,最接近的 tr 是行,将此行传递给 getRowMeta函数将提取数据属性,其中之一是index

从 PrimeFaces 5.3 开始:

rowIndex 可以在 ajax 行为扩展的参数中找到。

ext.params[0].value

- 注意:应该在 ajax 事件的 onstart 中传递(如问题中所示)。

关于javascript - 在 rowEdit ajax 事件中获取 rowIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194052/

相关文章:

javascript - 创建对象后设置原型(prototype)属性的可移植方法是什么?

javascript - 数组表示

php - 选择选项后如何提交表格?

java - 通过 ui :repeat in JSF 内的 jQuery UI 小部件访问附加值

java - 无法获取 PrimeFaces p :rating value and save it into the Oracle database

JSF 中的 Java Web 服务 URL

javascript - 退出模态窗口时停止播放 iframe 视频

javascript - 使用 jQuery 添加动态 css 是否存在任何性能问题

jquery - 如何在jquery中计算 "visible"选项卡?

无需更改页面的 PHP 表单