1

このバグは、Free jqGrid 4.9.0 でのみ発生しています (Free-jqGrid 4.8.0 に戻すと、すべて正常に動作します)。

jFiddleで再作成できなかったので、同じページに複数のグリッドがあることが原因である可能性があります(おそらく)。

不具合:

高度な検索ダイアログのスタイル 'top' と 'left' はどちらもデフォルトで 0px に設定されているため、ユーザーが検索ボタンをクリックすると、デフォルトでグリッドの左上に表示されます。

ここで、ダイアログを閉じて検索ボタンをもう一度クリックすると、「上」と「左」が何らかの形で再計算され、ダイアログが「上」の場合は -228.1875px、「左」の場合は -5px になります。 . 次にこのフローを繰り返すと、ダイアログが画面から消えました (-500px か何かになるため)。

これは、5 つのグリッドすべてで発生します。同じ動作。ダイアログは、再度開くたびにその位置を再計算し続けます。

この動作の原因となっている 4.9.0 の行を見つけるためにリバース エンジニアリングを開始しsavePositionOnHide、ブロック内の関数 (jquery.jqgrid.src.js の行 9896)が原因であることがわかりました。this.data(propName, {

私が交換した場合:

top: top,                 //parseFloat($w.css("top")),
left: left,               //parseFloat($w.css("left")),

top: getCssStyleOrFloat($w, "top"),             //parseFloat($w.css("top")),
left: getCssStyleOrFloat($w, "left"),               //parseFloat($w.css("left")),

4.8.0 からコピーしたもので、すべて正常に動作しています。

それで、これが本当にバグなのか、それとも私が見逃しているものなのか、疑問に思いました。

ありがとう、

4

1 に答える 1

1

バグレポートと問題を示すデモをありがとう! コードにバグがあることに同意します。savePositionOnHideここを参照)のコードを修正しました

savePositionOnHide = function (propName, frmgr, h) {
    var $w = h.w, $form = $(frmgr), toTop = h.c.toTop, offsetGbox,
        top = getCssStyleOrFloat($w, "top"),
        left = getCssStyleOrFloat($w, "left");
    // we use below .style.height and .style.width to save correctly "auto" and "100%" values
    // the "px" suffix will be saved too, but it's not a problem 
    if (toTop) {
        offsetGbox = $w.closest(".ui-jqgrid").offset();
        top -= offsetGbox.top;
        left -= offsetGbox.left;
    }
    ...
}

次へ

savePositionOnHide = function (propName, frmgr, h) {
    var $w = h.w, $form = $(frmgr), toTop = h.c.toTop, offsetGbox, offset, top, left;
    if (toTop) {
        offsetGbox = this.closest(".ui-jqgrid").offset();
        offset = $w.offset();
        top = offset.top - offsetGbox.top;
        left = offset.left - offsetGbox.left;
    } else {
        // we use below .style.height and .style.width to save correctly "auto" and "100%" values
        // the "px" suffix will be saved too, but it's not a problem 
        top = getCssStyleOrFloat($w, "top");
        left = getCssStyleOrFloat($w, "left");
    }

GitHubのメイン コードに変更をコミットしましあなたが投稿したデモは、GitHub のコードを直接使用しており、修正をコミットした後、正しく動作し始めます。

于 2015-06-25T21:31:33.210 に答える