我有一个从 af:commandLink 的 actionListener 调用的方法:
public static void invokeFunction(String function) {
ExtendedRenderKitService service =
Service.getRenderKitService(FacesContext.getCurrentInstance(),
ExtendedRenderKitService.class);
String invokeFn = function;
service.addScript(FacesContext.getCurrentInstance(), invokeFn);
}
调用以下j / s函数:
function scrollTopInit(posvals) {
var list = posvals.split(",");
window.console && console.log("found # ul " + $(".af_selectManyListbox_options").length);
$(".af_selectManyListbox_options").each ( function( i, el ) {
window.console && console.log("ul has " + $(el).children().length);
var pos = list[ i ];
if (pos) {
window.console && console.log("i = " + i + " pos = " + pos);
$(el).scrollTop(pos);
}
});
}
意图定位由af创建的有序列表:selectManyListbox使得 最上面的选中值将显示在顶部。通过firebug进行的所有记录和调试都表明了 这是有效的,但所有列表都保持原样。
然而,如果我在firebug控制台窗口中尝试以下表达式,它会移动所有已订购的字符 根据需要列出:
$(".af_selectManyListbox_options").each(function(i,el){if(i==0){console.log(i); $(el).scrollTop(100);}});
我正在使用jQuery 1.9.1而没有问题通过ExtendedRenderKitService进行其他bean驱动的j / s客户端操作,例如完美滚动条没有问题。
scrollTop阻止这项工作的问题是什么?
注意:从弹出窗口的popupfetchlistener调用相同的函数(从commandLink调用)没有任何区别。
答案 0 :(得分:1)
所以我刚刚确定的解决方案就是确保我所有的行动 如上所述发生 AFTER 除非弹出窗口可见,否则呈现弹出窗口 无论您尝试将其设置为什么,scrollTop将始终返回0。
如何在弹出窗口后确保出现这种情况?简单。在弹出标签中确保你
同时拥有clientlistener和serverlistener。有方法调用的方法
clientlistener触发一个自定义事件,该事件调用serverlistener然后调用
后端调用extendedrenderkit通过jQuery调整scrolTop。
所以在片段中弹出:
<af:serverListener type="scrollPosEvent" method="#{viewScope.configBean.scrollTopSet}"/>
<af:clientListener method="settingsClick" type="popupOpened" />
</af:popup>
所以settingsClick会触发scrollPosEvent():
settingsClick = function(event) {
var tab = event.getSource();
AdfCustomEvent.queue(tab, "scrollPosEvent");
}
哪个customevent触发serverlistener然后触发scrollTopSet()方法
public void scrollTopSet(ClientEvent clientEvent) {
clientEvent.getComponent();
SmartViewUtils.invokeFunction("scrollTopInit('" + scrollParms + "');");
}
答案 1 :(得分:0)
如果您添加了以下代码
function scrollTopInit(posvals) {
var list = posvals.split(",");
window.console && console.log("found # ul " + $(".af_selectManyListbox_options").length);
$(".af_selectManyListbox_options").each ( function( i, el ) {
window.console && console.log("ul has " + $(el).children().length);
var pos = list[ i ];
if (pos) {
window.console && console.log("i = " + i + " pos = " + pos);
$(el).scrollTop(pos);
}
});
}
作为 function 参数,这意味着您创建了一个函数,而不是调用它,之后应该通过调用
来调用它scrollTopInit(...)