2012-02-08 5 views
2

別のdiv idをページの参照として使用してdivを配置しています(必要な場所に表示されるようにします)。コードは次のとおりです。 -jQuery - オフセット付きのdivを配置してからもう一度配置する=別の結果

問題は、placementIDオフセットの数値は毎回同じですが、問題です。私がこれをもう一度呼び出すと、前回のオフセットと同じ量の新しい左オフセットを倍にして配置するように見えます。

など。私はクリックで関数を呼び出し、このdivをこのプレースメントdivの隣に置きます。それはそれを行います。その後、ユーザーは終了して別のクリックを行い、同じ機能を使用して別のdivを同じプレースメントdivの隣に配置します。それはそれを行いますが、前回と同じ位置に配置するのではなく、前回の位置を0点として参照し、左の量を加算します。つまり、divは現在距離の2倍の距離に置かれています。

ご注意ください。私はプレースメントボックスの上部と下部の寸法を確認しましたが、そのたびに変更されていません。

何が起こっているのかわかりません。

+0

あなたcontentDivを配置した後、別の位置にplacementIdされますか? – FiveTools

+0

前のdivを削除しましたか?あるいは '.position()'がうまくいくかもしれません。 – ijse

+0

[jsfiddle?](http://jsFiddle.net) –

答えて

5

誰かがこの問題に遭遇した場合、私は問題を非常に簡単に解決することができました...オフセットの代わりにCSSを使用します。私。

$('#contentDiv').css({top:placeTop,left:placeLeft}); 
+0

私はオフセットがこれをした理由を知りたがっています... – jpumford

0

$('#' + contentDiv)のオフセットを変更すると、後で呼び出す$('#' + placementID)のオフセットに影響すると考えられます。

3つのプレースメントID#1、#2、#3があるとします。オフセット#1

0,0#20,100#30,200

次に、#contentDivのオフセットを#1のオフセットに設定します。

ここで、#contentDivのオフセットは0,100です。これにより、プレースメントオフセットは#10,100#20,200#30,300になりました。それはおそらくあなたを捨てているものです。

+0

PlacementDiv自体は移動されていませんが、console.logを使用してプレースメントの上下に出力することでこれを明確にしました。 – waxical

0

http://bugs.jqueryui.com/ticket/6868によれば、要素は、().positionを呼び出す前に表示されなければなりません。 offet()を呼び出す前に要素を表示するようにコードを変更した後、それは魅力的に機能しました。

0

で所望のオフセット値を設定する前に、あなたの特性をリセットし(例えば)

$(this).css('top', '').offset({top: desiredTopOffset}); 
関連する問題