【问题标题】:jqGrid Custom call editable modal formjqGrid 自定义调用可编辑模态表单
【发布时间】:2016-01-06 11:32:39
【问题描述】:

我使用 jqGrid 4.9.3-pre - 免费 这个例子 ok-soft-gmbh.com (Oleg):

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 кастомно。 Тут по большей части только вы можете помочь。 У меня при вызове модального окна, с каждым вызовом увеличиватся 顶部和左侧。Пример своего кода не привожу。 Но если нужно напишу。

【问题讨论】:

  • Добрый день!您能否包括重现问题的演示?我无法在the demo 上复制和更改topleft 的位置。
  • я пока могу свой код написать:
  • 我创建了演示 jsfiddle.net/OlegKi/tzp91wnf,它重现了该问题。稍后我会检查它并在我的答案中发布错误修复。

标签: jqgrid free-jqgrid


【解决方案1】:

感谢您的错误报告!我刚刚发布了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/ 现在可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    相关资源
    最近更新 更多