在 table 内 PrimeFaces/jquery 失去焦点
Focus loss in PrimeFaces/jquery inside table
我正在为我的小网络项目使用 Primefaces、JSF 和 JQuery。我有一个包含一些列的数据Table。单元格是 inputText 字段和 editable。我获取数据并将它们显示到 table.
当我编辑 table 中的值并按回车键时,我希望光标跳转到下一个单元格。在我触摸所有相关单元格一次之前,这一切正常。这意味着我从第一行开始并毫无问题地转到最后一行(这就像只用回车键向下移动)。如果我到达最后一行,按 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());
}
}
数据的一部分Table(并非所有列)
<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>
试试这个,我在 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();
}
我正在为我的小网络项目使用 Primefaces、JSF 和 JQuery。我有一个包含一些列的数据Table。单元格是 inputText 字段和 editable。我获取数据并将它们显示到 table.
当我编辑 table 中的值并按回车键时,我希望光标跳转到下一个单元格。在我触摸所有相关单元格一次之前,这一切正常。这意味着我从第一行开始并毫无问题地转到最后一行(这就像只用回车键向下移动)。如果我到达最后一行,按 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());
}
}
数据的一部分Table(并非所有列)
<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>
试试这个,我在 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();
}