免费的 jqGrid 4.9.0 - 高级搜索对话框(多参数搜索)正在改变位置直到退出屏幕
Free jqGrid 4.9.0 - Advanced Search Dialog (mutli param search) is changing location until exit the screen
此错误仅发生在 Free jqGrid 4.9.0 上(当我切换回 Free-jqGrid 4.8.0 时一切正常)。
我无法在 jFiddle 上重新创建它,所以这可能是因为我在同一页面上有多个网格(也许)。
错误:
高级搜索对话框的样式 'top' 和 'left' 均默认为 0px,因此当用户单击搜索按钮时它们默认显示在网格的左上角。
现在,如果您关闭对话框并再次单击搜索按钮,'top' 和 'left' 会以某种方式重新计算,并且对话框上升 -228.1875 像素 'top' 和 -5px 表示 'left'。下次我重复这个流程时,对话框就从屏幕上消失了(因为它变成了 -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 复制过来的,一切正常。
所以我只是想知道,如果这确实是一个错误,或者我遗漏了什么。
谢谢,
感谢您提供错误报告和演示问题的演示!我同意代码有问题。我从
修复了 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");
}
您发布的 和 committed the changes to the main code on GitHub. The demo 直接使用 GitHub 中的代码,在我提交修复后它开始正常工作。
此错误仅发生在 Free jqGrid 4.9.0 上(当我切换回 Free-jqGrid 4.8.0 时一切正常)。
我无法在 jFiddle 上重新创建它,所以这可能是因为我在同一页面上有多个网格(也许)。
错误:
高级搜索对话框的样式 'top' 和 'left' 均默认为 0px,因此当用户单击搜索按钮时它们默认显示在网格的左上角。
现在,如果您关闭对话框并再次单击搜索按钮,'top' 和 'left' 会以某种方式重新计算,并且对话框上升 -228.1875 像素 'top' 和 -5px 表示 'left'。下次我重复这个流程时,对话框就从屏幕上消失了(因为它变成了 -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 复制过来的,一切正常。
所以我只是想知道,如果这确实是一个错误,或者我遗漏了什么。
谢谢,
感谢您提供错误报告和演示问题的演示!我同意代码有问题。我从
修复了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");
}
您发布的 和 committed the changes to the main code on GitHub. The demo 直接使用 GitHub 中的代码,在我提交修复后它开始正常工作。