我正在寻找一种方法将一个primefaces对话框的scrollBar滚动到顶部。
用例: 我在对话框中有一个表单,并且在表单提交时有一些输入验证。如果在其中一个输入字段上检测到错误,则应在具有滚动条的对话框顶部显示一条消息。
Java实际代码没有效果(consols没有错误): // modifierUrgenceDelaiForm:exception是p:messages组件的clientID 。RequestContext.getCurrentInstance()scrollTo( “modifierUrgenceDelaiForm:异常”);
感谢您的帮助。
答案 0 :(得分:1)
尝试将其放在提交按钮上:
<p:commandButton value="Submit" ....
oncomplete="if (args.validationFailed) {PF('dialogwv').content.scrollTop('0')}" />
答案 1 :(得分:0)
var elm = $("#formId\\:componentId");
smoothScroll(elm);
将下面的代码放在某些js文件中,并传递验证无法滚动到该组件的组件的id。如果你希望每次验证失败时滚动都进入,那么传递对话框顶部的某个组件的Id。
请注意,这是客户端。因此,当您在浏览器中检查元素时,需要传递出现在浏览器中的ID。
希望这会对你有所帮助。
function smoothScroll(elm) {
var startY = currentYPosition();
var stopY = elmYPosition(elm);
var distance = stopY > startY ? stopY - startY : startY - stopY;
if (distance < 100) {
scrollTo(0, stopY); return;
}
var speed = Math.round(distance / 100);
speed=speed+12;
if (speed >= 20) speed = 20;
var step = Math.round(distance / 50);
var leapY = stopY > startY ? startY + step : startY - step;
var timer = 0;
if (stopY > startY) {
for ( var i=startY; i<stopY; i+=step ) {
setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
leapY += step; if (leapY > stopY) leapY = stopY; timer++;
} return;
}
for ( var i=startY; i>stopY; i-=step ) {
setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
leapY -= step; if (leapY < stopY) leapY = stopY; timer++;
}
}