6

次の JQuery コードは、ページをフォームの最初のエラーまでスクロールします。

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

しかし、を固定位置$('html,body')の div クラスなどのコンテナー要素の名前に置き換えると、$('.myDivClass')うまく機能しないようです。送信ごとにランダムな場所に上下にスクロールするだけです。コンテナー要素が html,body 以外の場合、正しく動作しないようです。

何が間違っているのかわかりません。

コンテナー要素の css は次のようになります (意味がわかります)。

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

相対的な配置に offset() の代わりに position() を使用しようとしましたが、違いはありませんでした。

ありがとうございました!

更新: これには解決策がないようです。

4

5 に答える 5

3

私も同じ問題を抱えていました。最初の呼び出しでのみ機能します。

これを修正するには、animate() を呼び出す前に毎回一番上までスクロールする必要があります。

だから私は私の変更:

$(element).animate({scrollTop: 500});

$(element).scrollTop(0);
$(element).animate({scrollTop: 500});

はい、それは本当です。最初にスクロールするたびに、アニメーションがなく、私にとっては非常にうまく機能します。

それが役に立てば幸い。

于 2014-02-11T17:21:52.930 に答える
1

ウィンドウ以外のものをスクロールしている場合は、そのコンテナに対するエラーの位置を見つける必要があります。この場合、div. 要素が div にある場合は、position相対、固定、または絶対配置の最初の親を参照する代わりに使用します。

$('.mcModalWrap1')
     .stop()
     .delay(500)
     .animate({scrollTop: $errors.filter(":first").position().top -30},'slow');
于 2012-02-10T21:51:19.320 に答える
0

アイデアを捨てることで問題を解決しました。JQuery scrollTopは、特定の位置にスクロールするhtml、body以外の親コンテナーでは機能しません。上または下にスクロールする場合にのみ機能します。position()もoffset()も値を正しく計算しません。

誰かが答えを持っているなら、私は知りたいです。

于 2012-02-11T09:24:32.920 に答える
0

このコード行を置き換えて、希望どおりに動作するかどうかを確認してください。

$('#container').stop().delay(500).animate({scrollTop: $errors.filter(":first").offset().top - $('#container').offset().top + $('#container').scrollTop()},'slow');

$errors.filter(":first").offset().top - $('#container').offset().topで部品を交換できる$errors.filter(":first").position().topと思います。

于 2019-07-10T15:58:31.320 に答える