时间:2015-11-10 13:10:45

标签: javascript jquery jsf primefaces focus

我在我的小webproject中使用Primefaces,JSF和JQuery。我有一些包含一些列的dataTable。单元格是inputText字段并且可编辑。我得到数据并将它们显示在表格中。

当我在表格中编辑值并按回车键时,我希望光标跳转到下一个单元格。这一切正常,直到我触摸所有相关的细胞一次。这意味着我从第一行开始并且没有任何问题地转到最后一行(就像使用回车键一样向下键)。如果我到达最后一行,按下Enter键后焦点应返回到第一行。但这不起作用。我在很短的时间内看到焦点在第一行,但在几毫秒之后焦点就会失去。

另一个例子:我从第3行开始直到最后一行。然后焦点跳到第一行,直到第2行。这有效,但我无法再次关注第3行。我不知道会发生什么以及为什么会这样。

以下是相关代码:

JS部分(jquery选择器工作正常):

function cmid_jump(ind) {
console.log(ind);
ind++;
if($('#formPool\\:tabView\\:formTable\\:p1\\:'+ind+'\\:cmid').length >=1) { 
    console.log($('#formPool\\:tabView\\:formTable\\:p1\\:' + ind + '\\:cmid').click());
} 
else {
    console.log($('#formPool\\:tabView\\:formTable\\:p1\\:0\\:cmid').click());
}

}

数据表的一部分(并非所有列)

 <p:dataTable id = "p1" var = "pool" value = "#{controll_pool.data}" rowIndexVar="index" editable="true" editMode="cell" style="font-size: 12px">

                            <p:column id="columnMid" headerText= "Mittelkurs" style="font-size: 12px">
                                <p:cellEditor>
                                    <f:facet name="output">
                                        <h:outputText value = "#{pool.kurs_mid}" rendered="#{not empty pool.kurs_mid}"/>
                                    </f:facet>
                                    <f:facet name="input" >
                                        <p:inputText id= "cmid" onkeydown="if (event.keyCode == 13) {cmid_jump(#{index})}" styleClass="changeable" value="#{pool.mid}" />
                                    </f:facet>
                                </p:cellEditor>
                            </p:column>
</p:dataTable>

1 个答案:

答案 0 :(得分:0)

尝试这个,我在primefaces 5.0

中做到了这一点
function cmid_jump(ind) {
   ind++;
   var table =  $('#formPool\\:tabView\\:formTable\\:p1');
   var max_size = table.find('tbody tr').length;
   if(ind >= max_size){
       return cmid_jump(-1);  
   }
   var cell = table.find("tr[data-ri="+ind+"]").find('td:first');
   cell.click();
}