我在我的应用程序中使用PrimeFaces 5.1
,我在selectOneMenu
内使用了dataTable
,当我按下时添加更多按钮需要关注selectOneMenu
按钮。
示例代码
的JavaScript
function focusMenu(id)
{
var focusId="#{p:component('mainTable')}"+":"+id;
PrimeFaces.focus(final);
}
XHTML
<div style="padding-left:4px;height:
expression(this.scrollHeight > 399? '400px' : 'auto');max-height:400px;overflow-x:auto;overflow-y:auto;">
<p:dataTable id="mainTable" value=#{main.UserDataTable} .....>
<p:column headerText="Drop Down">
<p:selectOneMenu id="dropdDownId"...>
.....
</p:selectOneMenu>
</p:column>
<p:column headerText="Operation">
<p:commandButton value="Add More Row" action="{user.addMoreRowAction}"
update="mainTable"/>
</p:column>
</p:dataTable>
</div>
爪哇
public String addMoreRowAction()
{
RequestContext.getCurrentInstance().execute("focusMenu('"+ rowIndex + ":dropdDownId"')");
return null;
}
上面的代码可以很好地将最后添加的selectOneMenu
集中在我的预期上,但浏览器滚动条不会根据最近添加的selectOneMenu
组件向下移动。
请帮我解决这个问题。
答案 0 :(得分:0)
您可以使用scrollTop
功能将滚动条转到焦点ID。
将focusid
传递给函数。
function setScrollPos(focusId){
$('html,body').animate({
scrollTop: $(focusId).offset().top-65
}, 1000);
}
调用上述功能
function focusMenu(id)
{
var focusId="#{p:component('mainTable')}"+":"+id;
PrimeFaces.focus(final);
setScrollPos(focusId); <<------
}