jqGrid的自定义调用编辑模式窗体

问题描述:

我使用的jqGrid 4.9.3预 - 免费 这个例子ok-soft-gmbh.com(奥列格):jqGrid的自定义调用编辑模式窗体

demo

但是我把我的代码行:

ondblClickRow: function (rowid) { 
    $(this).jqGrid("viewGridRow", rowid, { caption: "Details of the invice" }); 
} 

每个新挑战的模态窗口正在向下移动。 我发现了一个行,其中的变化:

 if (!o.recreateForm) { 
      var formProp = $self.data("formProp"); 
      console.log(formProp) 
      if (formProp) { 
       formProp.top = Math.max(formProp.top, 0); 
       formProp.left = Math.max(formProp.left, 0); 
       $.extend(o, formProp); 
      } 
     } 

每次调用一个模态窗口增加formProp.topformProp.left

如何解决这个问题?

对于奥列格:Добрыйдень! МненужновызыватьviewGridRowиeditGridRowкастомно。 Тутпобольшейчаститольковыможетепомочь。 Уменяпривызовемодальногоокна,скаждымвызовомувеличиватся顶部和left.Примерсвоегокоданепривожу。 Ноеслинужнонапишу。

+0

Добрыйдень!你能否加入演示,以便重现问题?我无法在[演示](http://www.ok-soft-gmbh.com/jqGrid/ViewFormOnDoubleClick1.htm)上重现和更​​改'top'和'left'的位置。 – Oleg

+0

япокамогусвойкоднаписать: –

+0

我创建演示https://jsfiddle.net/OlegKi/tzp91wnf/其再现了这个问题。我会检查它并稍后将错误修复与我的答案一起发布。 – Oleg

谢谢你的错误报告!我刚刚发布the bug fix。它改进的内部savePositionOnHide功能的用于保存的先前位置的代码从

savePositionOnHide = function (propName, frmgr, h) { 
    var $w = h.w, $form = $(frmgr), $gbox = this.closest(".ui-jqgrid"), top, left; 
    if ($.contains($gbox[0], $w[0])) { 
     // 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"); 
    } else { 
     top = $w.offset().top - 
       ($gbox.offsetParent().offset().top + 
       $gbox.offset().top + 
       $gbox.position().top + 
       parseFloat($gbox.css("border-top-width") || 0)); 
     left = $w.offset().left - 
       ($gbox.offsetParent().offset().left + 
       $gbox.offset().left + 
       $gbox.position().left + 
       parseFloat($gbox.css("border-left-width") || 0)); 
    } 
    this.data(propName, { 
     top: top,     //parseFloat($w.css("top")), 
     left: left,    //parseFloat($w.css("left")), 
     width: getCssStyleOrFloat($w, "width"),    //$(h.w).width(), 
     height: getCssStyleOrFloat($w, "height"),   //$(h.w).height(), 
     dataheight: getCssStyleOrFloat($form, "height") || "auto", 
     datawidth: getCssStyleOrFloat($form, "width") || "auto" 
    }); 
    $w.remove(); 
    if (h.o) { h.o.remove(); } 
} 

savePositionOnHide = function (propName, frmgr, h) { 
    var $w = h.w, $form = $(frmgr), $gbox = this.closest(".ui-jqgrid"), 
     getTopOrLeftRelativeToGbox = function (topOrLeft) { 
      return $w.offset()[topOrLeft] - 
       ($gbox.offsetParent().offset()[topOrLeft] + 
       $gbox.offset()[topOrLeft] + 
       $gbox.position()[topOrLeft] + 
       parseFloat($gbox.css("border-" + topOrLeft + "-width") || 0)); 
     }; 
    this.data(propName, { 
     top: getTopOrLeftRelativeToGbox("top"), 
     left: getTopOrLeftRelativeToGbox("left"), 
     width: getCssStyleOrFloat($w, "width"), 
     height: getCssStyleOrFloat($w, "height"), 
     dataheight: getCssStyleOrFloat($form, "height") || "auto", 
     datawidth: getCssStyleOrFloat($form, "width") || "auto" 
    }); 
    $w.remove(); 
    if (h.o) { h.o.remove(); } 
}, 

我希望问题已在表格编辑的输入参数的所有组合的情况下。至少演示https://jsfiddle.net/OlegKi/tzp91wnf/现在可以正常工作。