jqGrid - 拖动一行进行排序会拧紧单元格宽度

Lot*_*har 5 javascript jquery jqgrid

我的问题:当我在jqGrid中拖动一行并完成自定义重新加载功能时,网格的单元格(以前在定义网格时设置的所有不同宽度)都会调整为大小相同的宽度.这种情况发生在Webkit浏览器中,但不发生在Firefox中.

代码: 我已拖动到网格上启用排序:

$mygrid.jqGrid(
    'sortableRows', {
        update: function(e, ui) {
            sort_grid(e, ui);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我有一个名为drag complete的排序函数sort_grid.这里是:

function sort_grid(e, ui) {
    var current_grid = $(ui.item[0]).closest('table').attr('id');
    var $current_row, moved_id, next_id, next_priority;
    var $moved_row = $('#' + current_grid + ' tr');
    var cnt = 0;

    this_id = ui.item[0].id;
    $moved_row.each(function () {
        if ($(this).attr('id') == this_id) {
            $current_row = $moved_row.eq(cnt);
            moved_id = $current_row.attr("id");
            next_id = $current_row.next().attr("id");
            next_priority = $current_row.next().children("td:first").attr("title");
        }
        cnt++;
    });

    if ( typeof moved_id !== 'undefined' ) {
        if ( next_priority == 'undefined' ) {
            next_priority = '999';
        }

        $.ajax({
            url:my_url,
            type:"POST",
            data:"moved_id=" + moved_id + "&next_id=" + next_id + "&next_priority=" + next_priority,
            success: function(data) {

                $('.grid').setGridParam({loadonce:false, datatype:'json'}); // force grid refresh from server
                $('#' + current_grid).trigger("reloadGrid");
                $('.grid').setGridParam({loadonce:true}); // reset to use local values

            }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦我点击重新加载触发器$('#' + current_grid).trigger("reloadGrid");并重新加载完成,网格现在在网格中的单元格上具有不正确的宽度(它们从各种宽度变为全部具有相同的宽度).

最初创建网格时,它具有以正常jqGrid方式定义的宽度:

colModel:[
    {name:'one', index:'one', sortable:true, width:45},
    {name:'two', index:'two', sortable:true, width:180},
]
Run Code Online (Sandbox Code Playgroud)

但是在网格重新加载之后,宽度被重置都是相同的宽度(我假设这是网格的总宽度均匀地划分为行中的单元格总数).那么,我是否需要再次显式设置这些宽度,可能是在网格重新加载后调用以下内容?

$('.grid').setGridParam({
    colModel:[
        {name:'one', index:'one', sortable:true, width:45},
        {name:'two', index:'two', sortable:true, width:180},
    ]
});
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的修复,重新加载后重新定义了colModel并明确设置了宽度,但它没有任何效果.Weirder,如果我进入浏览器控制台并使用javascript设置宽度它也没有任何效果.那让我很难过.


不幸的是,我看起来像jqGrid"答案人"(奥列格)不在...哈哈.

小智 1

您是否尝试过在 jQgrid 选项中设置此属性

   width: 'auto',
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试在更新行后重新加载网格

 jQuery('.grid').trigger('reloadGrid');
Run Code Online (Sandbox Code Playgroud)