scrollTo在primefaces对话框中

时间:2016-02-01 15:55:08

标签: javascript java jquery primefaces

我正在寻找一种方法将一个primefaces对话框的scrollBar滚动到顶部。

用例: 我在对话框中有一个表单,并且在表单提交时有一些输入验证。如果在其中一个输入字段上检测到错误,则应在具有滚动条的对话框顶部显示一条消息。

Java实际代码没有效果(consols没有错误): // modifierUrgenceDelaiForm:exception是p:messages组件的clientID 。RequestContext.getCurrentInstance()scrollTo( “modifierUrgenceDelaiForm:异常”);

感谢您的帮助。

2 个答案:

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