jqGrid 自定义调用可编辑模态表单
jqGrid Custom call editable modal form
我使用 jqGrid 4.9.3-pre-free
这个例子ok-soft-gmbh.com (Oleg):
但是我在我的代码行中输入:
ondblClickRow: function (rowid) {
$(this).jqGrid("viewGridRow", rowid, { caption: "Details of the invice" });
}
每个新挑战的模式 window 都在下降。
我发现一行发生了变化:
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);
}
}
每次调用模态 window 增加 formProp.top
和 formProp.left
。
如何解决这个问题?
奥列格:下午好!我需要调用 viewGridRow 和 editGridRow 自定义。在大多数情况下,只有您可以提供帮助。当我调用模态窗口时,top 和 left 会随着每次调用而增加。我没有给出我的代码示例。但如果有必要,我会写的。
感谢您的错误报告!我刚刚发布了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/ 现在可以正常工作了。
我使用 jqGrid 4.9.3-pre-free 这个例子ok-soft-gmbh.com (Oleg):
但是我在我的代码行中输入:
ondblClickRow: function (rowid) {
$(this).jqGrid("viewGridRow", rowid, { caption: "Details of the invice" });
}
每个新挑战的模式 window 都在下降。 我发现一行发生了变化:
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);
}
}
每次调用模态 window 增加 formProp.top
和 formProp.left
。
如何解决这个问题?
奥列格:下午好!我需要调用 viewGridRow 和 editGridRow 自定义。在大多数情况下,只有您可以提供帮助。当我调用模态窗口时,top 和 left 会随着每次调用而增加。我没有给出我的代码示例。但如果有必要,我会写的。
感谢您的错误报告!我刚刚发布了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/ 现在可以正常工作了。