1

我有以下代码段可将表单滚动到第一个错误:

$('html,body').stop().delay(500).animate({scrollTop: $errors.filter(":first").offset().top -30},'slow');

我的 jquery 验证代码末尾的完整块如下所示。如果提交时出现错误,它会将表单滚动到第一个错误。

var $errors = $(".mcError");
if($errors.size() > 0){
    if(settings.mcScrollToError){
        $('html,body').stop().delay(500).animate({scrollTop: $errors.filter(":first").offset().top -30},'slow');
    }
    return false;
}
else{
    mcResponse('', false);
    return true;
}

但是,如果我将 替换$('html,body')为容器元素的名称,例如 div class $('.myDivClass'),它似乎效果不佳。它只是滚动到随机位置。

容器元素的 css 看起来像这样(所以你知道我的意思):

.mcModalWrap1{
position:fixed;
top:0;
bottom:0;
left:0;
right:0;
padding:50px;
background-image:url(images/overlay.png);
overflow:auto;
z-index:999;
display:none;
}
4

1 回答 1

1

.offset()

获取匹配元素集中第一个元素相对于文档的当前坐标。

来源:http ://api.jquery.com/offset/

你想用来.position()获取相对位置::

获取匹配元素集中第一个元素相对于偏移父元素的当前坐标。

来源:http ://api.jquery.com/position

例如:

$('.myDivClass').stop().delay(500).animate({ scrollTop: ($errors.filter(":first").position().top -30) },'slow');
于 2012-02-08T20:52:43.843 回答