如何正确拖动jqgrid编辑表单?

时间:2015-04-02 12:44:26

标签: javascript jquery jquery-ui jqgrid jquery-ui-draggable

当我拖动编辑表单时,表单的位置无效。 始终从位置(0,0)开始到窗口。 它的位置与鼠标光标位置无关。

我该如何解决这个问题?

这些是我的代码。

<table id="jqGrid"></table> <div id="jqGridPager"></div>


   $("#jqGrid").jqGrid({
        url: url,
        mtype: "GET",
        postData: data,
        datatype: "jsonp",
        colModel: [            
            { label: 'd_id', name: 'd_id', width: 15, key: true, hidden: true},
            { label: 'driver', name: 'd_name', width: 30, align:"center", editable: true, editoptions: {size: 40} },
            { label: 'phone', name: 'd_phone', width: 30, align:"center", editable: true, editoptions: {size: 40} },
            { label: '', name: '' }
        ],
        viewrecords: true,
        autowidth: true,
        height: '100%',
        rownumbers: true,
        rownumWidth: 25,
        rowNum: 20,
        editurl: g_base_url + 'driver/edit',
        pager: "#jqGridPager",
        loadError : function(xhr,st,err) {

        },
        loadComplete: function () {
        },
        onCellSelect: function(rowid, iCol, cellcontent, e) {

        }
    });

我的jqgrid版本是4.8,jquery版本是jquery-1.11.2,jquery-ui版本是1.11.4。

请访问jqgrid演示并点击编辑按钮(页面栏中的“+”符号)并拖动编辑表单serveral times。您可以找到它的位置始终从pos (0,0)开始。

演示链接为http://www.guriddo.net/demo/guriddojs/edit_add_delete/edit_template/index.html

1 个答案:

答案 0 :(得分:2)

您描述的问题似乎是Guriddo jqGrid JS 4.8.x中的一个错误。我尝试过其他演示,很多人都有同样的问题。因此,我建议您至少在为Guriddo jqGrid JS购买Guriddo forum时向the licence发布错误报告。

我开发了名为free jqGrid的jqGrid的免费分叉(请参阅the readmethe wiki)。您可以直接从CDN进行尝试。如果你在jQuery UI模式对话框中使用网格,那么你应该使用在发布免费jqGrid 4.8之后发布的最新代码。问题已在the answer中报告,我在免费的jqGrid中添加了新选项onTop

$.jgrid.jqModal = $.jgrid.jqModal || {};
$.extend(true, $.jgrid.jqModal, {toTop: true});

因此,您可以使用网址http://rawgit.com/free-jqgrid/jqGrid/master/css/ui.jqgrid.csshttp://rawgit.com/free-jqgrid/jqGrid/master/js/jquery.jqgrid.src.jshttp://cdn.jsdelivr.net/free-jqgrid/4.8.0/js/i18n/grid.locale-en.jshttp://rawgit.com/free-jqgrid/jqGrid/master/js/i18n/grid.locale-en.js等区域设置在免费的jqGrid中是可选的。

我稍后会尝试修改jqGrid使用的对话框代码,以便检测onTop: true的情况,并在需要时自动设置选项。由于某些原因,我不想将其设为默认值。我分析了jqGrid 4.7的代码并进行了很多更改。所有对话框(如编辑表单)都在jqGrid中保留在内存中的一个问题。如果关闭对话框,它将被隐藏。对话框中使用的事件处理程序,如onClick处理程序引用网格的DOM元素和其他对象。还有一些其他缺点。所以我这样做,在关闭自由jqGrid中的对话框时,表单将完全失真。默认设置toTop: false使网格的所有元素包括所有对话框都被创建为在网格上构建的gbox div的子元素。因此,只需删除gbox,就可以从页面中删除由jqGrid创建的所有元素。问题只是覆盖层可能会移动到页面顶部(是<body>的子节点),就像对话框本身一样,如果有一个网格在另一个模态对话框中。我希望以后能找到完美的解决方案。您只需为编辑表单设置toTop: true选项,或者像上面的代码一样设置全局。