Javascript jqGrid GridUnload/GridDestroy

Javascript jqGrid GridUnload/GridDestroy,javascript,jqgrid,Javascript,Jqgrid,当我使用$('#mygrid').jqGrid('GridUnload')我的网格被破坏:没有寻呼机/没有标题 在一个wiki中,我发现: 与前一种方法的唯一区别是网格被破坏,但是 表格元素和寻呼机(如果有)准备好再次使用 我找不到GridUnload/GridDestroy之间的任何区别,或者我有什么问题吗 我使用3.8.在页面上创建jqGrid,您必须在页面上希望看到网格的位置插入一个空的元素。table元素的最简单示例是 在调用$('#mygrid').jqGrid({…})并创建列标题等

当我使用
$('#mygrid').jqGrid('GridUnload')我的网格被破坏:没有寻呼机/没有标题

在一个wiki中,我发现:

与前一种方法的唯一区别是网格被破坏,但是 表格元素和寻呼机(如果有)准备好再次使用

我找不到GridUnload/GridDestroy之间的任何区别,或者我有什么问题吗


我使用3.8.

在页面上创建jqGrid,您必须在页面上希望看到网格的位置插入一个空的
元素。table元素的最简单示例是

在调用
$('#mygrid').jqGrid({…})
并创建列标题等网格元素之前,页面上将不会看到空的
元素本身

方法
GridDestroy
的工作原理如下。它删除属于网格的所有元素,包括
元素


另一方面,方法
GridUnload
删除所有内容,但
元素保留在页面上。因此,您可以在同一位置创建新网格。如果需要根据不同的条件在一个位置创建不同的网格,则方法
GridUnload
非常有用。看着我的眼睛。演示演示了如何在同一位置动态创建两个不同的网格。如果您只是将
GridDestroy
中的
GridUnload
替换为
GridDestroy
,演示将不起作用:在销毁第一个网格后,不会在同一位置创建其他网格。

除了Oleg的回答之外,我想指出GridUnload做的更多,只是从表中删除网格。它删除了原始的HTML表格元素(和寻呼机),并在其位置上显示一个相同的元素(至少在4.5.4中是这样)


这意味着,如果将一些事件处理程序附加到table HTML元素(即jquery为on,比如(“#gridID”)。on('event','selector',handler)),它们也将被删除。如果用新网格替换旧网格,事件将不会在新网格上触发…

只要我没有组头,Oleg的回答对我来说就行了

当我添加带有“setGroupHeaders”的组标题行时

“GridUnload”后跟$(“#mygrid”).jqGrid({…})的结果不一致

它在Chrome中工作良好,但在IE11中不起作用

在IE11中,每个“jqg第三行标题”项最终呈现在不同的行上(对角)

我正在使用免费的jqGrid:query.jqGrid.src.js版本4.13.4进行调试。 我将问题追溯到这个文件中以第9936行开始的代码:

if (o.useColSpanStyle) {
    // Increase the height of resizing span of visible headers
    $htable.find("span.ui-jqgrid-resize").each(function () {
        var $parent = $(this).parent();
        if ($parent.is(":visible")) {
            this.style.cssText = "height:" + $parent.height() + "px !important; cursor:col-resize;";
            //this.style.cssText = "height:" + $parent.css('line-height'); + "px !important;cursor:col-resize;";
        }
    });
    // Set position of the sortable div (the main lable)
    // with the column header text to the middle of the cell.
    // One should not do this for hidden headers.
    $htable.find(".ui-th-column>div").each(function () {
        var $ts = $(this), $parent = $ts.parent();
        if ($parent.is(":visible") && $parent.is(":has(span.ui-jqgrid-resize)") && !($ts.hasClass("ui-jqgrid-rotate") || $ts.hasClass("ui-jqgrid-rotateOldIE"))) {
            // !!! it seems be wrong now
            $ts.css("top", ($parent.height() - $ts.outerHeight(true)) / 2 + "px");
            // $ts.css("top", ($parent.css('line-height') - $ts.css('line-height')) / 2 + "px");
        }
     });
}
$(ts).triggerHandler("jqGridAfterSetGroupHeaders");
});
此代码设置与每个“jqg第三行标题”项相关的高度和顶部css值。这导致了“jqg第三排标题”的高度和对角线布局
潜在缺陷:

上面的$parent.height()和$ts.height()方法返回IE11中以前的jqGrid表格高度。在Chrome中,它们返回“th”计算高度(top=0)。 我添加并测试了使用行高的2条注释行。 当使用线高度时,IE11工作正常。 我不完全理解JqGrid调整大小逻辑,因此这可能不是一个解决方案。
替代解决方案:

如果您指定。

 colModel: 
     {
     label: 'D',
     name: 'W',
     width: 6,
     align: 'center',
     resizable:false  //required for IE11 multiple calls to this init()
     },
当Resizeable为false时,不会遇到上述代码,也不会设置高度和顶部。

Oleg的jqGrid是一个非常好的控件。也许他可以用IE11上的groupheader测试他的演示网格。

还有一个问题:在php脚本完成他的工作之前,是否有等待/暂停/超时功能(在我的脚本中创建pdf并进行一些mysql查询)。.delay(来自jquery)似乎不起作用。有任何想法和想法吗?(对于社区:Oleg讲德语;-)再次感谢Oleg!我的问题是jqgrid比php SKcript快。我想延迟createmygrid()函数的执行,如您的示例所示。@Oleg..您能帮我一下吗?在较新的版本中,这已经不起作用了。使用此选项卸载jqGrid:$.jgrid.gridUnload(“#list”)@都铎:哪种产品的更新版本?“jqGrid”不存在。jqGrid的最后一个版本是4.7。Tony Tomov将许可协议、产品名称更改为“Guriddo jqGrid”(参见),并将其商业化(参见价格)。不久之后,我开始使用jqGrid 4.7(jqGrid的最新版本)的fork,并以这个名字在GitHub上发布。免费jqGrid的当前版本是4.14.0。免费jqGrid允许$(“#列表”).jqGrid(“GridUnload”)