免费jqGrid 4.9.0 - 高级搜索对话框(多种搜索搜索)正在更改位置,直到退出屏幕

时间:2015-06-24 18:40:16

标签: jquery jqgrid free-jqgrid

这个错误只发生在Free jqGrid 4.9.0上(当我切换回Free-jqGrid 4.8.0时,一切运行良好)。

我无法在jFiddle上重新创建它,所以可能是因为我在同一页面上有多个网格(可能)。

错误:

高级搜索对话框的样式“顶部”和“左侧”默认为0px,因此当用户单击搜索按钮时,它们默认位于网格的左上角。

现在,如果您关闭对话框并再次单击搜索按钮,则会以某种方式重新计算“顶部”和“左侧”,对话框的上限为-228.1875px,“top”为-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复制,一切运作良好。

所以我只是想知道,如果这确实是一个错误,或者其他我错过的东西。

谢谢,

1 个答案:

答案 0 :(得分:1)

感谢您提供错误报告和演示此问题的演示!我同意代码是错误的。我修改了savePositionOnHide的代码(请参阅here

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");
    }

committedGitHub上主代码的更改。您发布的The demo直接使用GitHub中的代码,并在我提交修复后开始正常工作。