场景是这样的:
有一个数据表有很多行,每行包含一个inputtext,表外有一个键盘,当用户点击键盘上的一个按钮时,selectedRow中的inputtext会被更新,我希望它是onfocus所以用户还可以使用键盘输入更多文本。
我使用p:commandButton作为键盘按钮,使用ajax submit在bean中设置selectedItem并更新数据表以使输入文本更改,但之后,焦点要么丢失,要么在页面的第一个输入文本上。
我正在使用primeface 3.4。 代码是这样的:
<p:dataTable id="datatable1" var="item" value="#{bean.itemlist}" rowKey="#{item.id}" rowIndexVar="rowIndex"
widgetVar="datatableVar" selection="#{bean.selectedItem}" selectionMode="single">
<p:column>
<p:inputText id="name" value="#{bean.selectedItem.name}"
onfocus="datatableVar.unselectAllRows();datatableVar.selectRow(#{rowIndex})" >
</p:column>
...
</p:dataTable>
<p:commandButton value="1" update="datatable1" id="bt1"
actionListener="#{bean.appendItem('1')}" />
我可以使用p:commandButton的oncomplete事件设置inputtext焦点,但p:dataTable中似乎没有客户端API来获取所选行。
答案 0 :(得分:1)
我最终使用jQuery选择器来选择inputText。在渲染的html代码中,所选行(tr)具有属性“aria-selected='true'
”。
JS代码:
var ele=$($("[aria-selected='true']").find('input').get(0));
ele
是我可以使用的jQuery组件,例如ele.focus()
或ele.keyup()