2017-07-20 3 views
2

Arbeits ich PrimeFaces 5.1 in meiner Anwendung verwende, habe ich selectOneMenu innerhalb von dataTable, Wenn ich drücken mehr Taste in den selectOneMenu Taste konzentrieren zu müssen.Primefaces selectOneMenu Fokus nicht

Beispielcode

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> 

Java

public String addMoreRowAction() 
{ 
RequestContext.getCurrentInstance().execute("focusMenu('"+ rowIndex + ":dropdDownId"')"); 
return null; 
} 

Hier ist der obige Code ist gut funktionieren die zuletzt hinzugefügten zu konzentrieren selectOneMenu wie das, was ich erwartet hatte, aber der Browser Bildlaufleiste nicht nach unten auf Bewegung basiert Fokussierung der kürzlich selectOneMenu Komponente hinzugefügt.

Bitte helfen Sie mir, das Problem zu lösen.

Antwort

0

Sie können die Bildlaufleiste mit der Funktion scrollTop zur Fokus-ID bringen. Übergeben Sie die focusid in die Funktion.

function setScrollPos(focusId){ 
    $('html,body').animate({ 
      scrollTop: $(focusId).offset().top-65 
    }, 1000); 
} 

Rufen Sie die obige Funktion

function focusMenu(id) 
{ 
var focusId="#{p:component('mainTable')}"+":"+id; 
PrimeFaces.focus(final); 
setScrollPos(focusId); <<------ 
} 
Verwandte Themen