Primefaces selectOneMenu焦点不起作用

时间:2017-07-20 08:31:51

标签: jsf primefaces

我在我的应用程序中使用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组件向下移动。

请帮我解决这个问题。

1 个答案:

答案 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); <<------
}