Получить все выбранные идентификаторы jqgrid в функции внешнего javascript - javascript


1

Я использую универсальную функцию сетки в своем приложении, и она работает так, как я ожидал. Но проблема в том, что мне нужно получить все выбранные записи в разбивке по страницам во внешней функции javascript. Ниже мой код,

function createCommodity(){
$.ajax({
    url : commoditycategory.do?method=listCommodity + &random=
            + Math.random(),
    type : "POST",
    async : false,
    success : function(data) {
        $("#list2").jqGrid(GridUnload);
        var newdata = jQuery.parseJSON(data);
        var wWidth = $(window).width();
        var dWidth = wWidth * 0.7;
        var wHeight = $(window).height();
        var dHeight = wHeight * 0.5, idsOfSelectedRows = [];
    jQuery("#list2").jqGrid({
        data : newdata,
        datatype : "local",
        colNames : [ "id", "Commodity Code",
                "Commodity Description", "Commodity Category" ],
        colModel : [
                {
                    name : id,
                    index : id,
                    hidden : true,
                    editable : true
                },
                {
                    name : commodityCode,
                    index : commodityCode,
                    align : "center",
                    editable : true,
                    editrules : {
                        required : true
                    }
                },
                {
                    name : commodityDesc,
                    index : commodityDesc,
                    align : "center",
                    editable : true,
                    editrules : {
                        required : true
                    }
                },
                {
                    name : commodityCategoryId,
                    index : commodityCategoryId,
                    align : "center",
                    // hidden : true,
                    editable : true,
                    edittype : "select",
                    editoptions : {
                        dataUrl : commoditycategory.do?method=parentCategory
                                + &random= + Math.random()
                    },
                    editrules : {
                        edithidden : true,
                        required : true
                    // custom : true
                    }
                } ],
        pager : "#pager2",
        rowNum : 10,
        rowList : [ 10, 20, 50 ],
        height : "230",
        width : dWidth,
        onSelectRow: function (id, isSelected) {
            var p = this.p, item = p.data[p._index[id]], i = $.inArray(id, idsOfSelectedRows);
            item.cb = isSelected;
            if (!isSelected && i >= 0) {
                idsOfSelectedRows.splice(i,1); // remove id from the list
            } else if (i < 0) {
                idsOfSelectedRows.push(id);
            }
        },
        loadComplete: function () {
            var p = this.p, data = p.data, item, $this = $(this), index = p._index, rowid, i, selCount;
            for (i = 0, selCount = idsOfSelectedRows.length; i < selCount; i++) {
                rowid = idsOfSelectedRows[i];
                item = data[index[rowid]];
                if (cb in item && item.cb) {
                    $this.jqGrid(setSelection, rowid, false);
                }
            }
        },
        multiselect : true,
        cmTemplate : {
            title : false
        }
    });
    $grid = $("#list2"),
    $("#cb_" + $grid[0].id).hide();
    $("#jqgh_" + $grid[0].id + "_cb").addClass("ui-jqgrid-sortable");
    cbColModel = $grid.jqGrid(getColProp, cb);
    cbColModel.sortable = true;
    cbColModel.sorttype = function (value, item) {
        return typeof (item.cb) === "boolean" && item.cb ? 1 : 0;
    };
    }
 });
}

До сих пор его работа великолепна. Он держит правильные строки, которые выбираются между страницами. И моя внешняя функция JS, где мне нужно получить выбранные строки, включает разбиение на страницы,

function updateCommodity() {
    var grid = jQuery("#list2");
    var ids = grid.jqGrid(getGridParam, selarrrow); // This only returns selected records in current page.
    if (ids.length > 0) {
        var html = "<table id=commodityTable class=main-table width=100% border=0 style=border:none;border-collapse:collapse;float: none;><thead><td class=header>Commodity Code</td><td class=header>Commodity</td><td class=header>Action</td></thead><tbody>";
        for ( var i = 0, il = ids.length; i < il; i++) {
            var commodityCode = grid.jqGrid(getCell, ids[i],
                    commodityCode);
            var commodityDesc = grid.jqGrid(getCell, ids[i],
                    commodityDesc);
            html = html
                    + "<tr class=even id=row" + i + "><td><input type=text name=commodityCode id=geographicState"+i+" class=main-text-box readonly=readonly value=" + commodityCode + "></td>";
            html = html
                    + "<td><input type=text name=commodityDesc id=commodityDesc"+i+" class=main-text-box readonly=readonly value=" + commodityDesc + "></td>";
            html = html
                    + "<td><a style=cursor: pointer; onclick=deleteRow("commodityTable","row"
                    + i + ""); >Delete</a></td></tr>";
        }
        html = html + "</tbody></table>";
        $("#commodityArea").html(html);
}
}

Обновление У меня fiddled проблема для большей ясности в проблеме.

1 ответ

3

Прежде всего, я хочу напомнить, что вы используете код, который я опубликовал в .

Я вижу, что решение вашей проблемы очень просто. Список опций jqGrid можно легко расширить. Если вы просто добавили новое свойство в список параметров

...
data : newdata,
datatype : "local",
idsOfSelectedRows: [],
...

вам не нужно больше определять переменную idsOfSelectedRows (см. строку var dHeight = wHeight * 0.5, idsOfSelectedRows = []; вашего кода). Для доступа к новой опции вы можете использовать

var ids = grid.jqGrid(getGridParam, idsOfSelectedRows);

вместо var ids = grid.jqGrid(getGridParam, selarrrow);. Чтобы код обратного вызова onSelectRow и loadComplete работал с idsOfSelectedRows как опция jqGrid, вы должны просто изменить первую строку обратных вызовов из

var p = this.p, ...

to

var p = this.p, idsOfSelectedRows = p.idsOfSelectedRows, ...

Все.

ОБНОВЛЕНО. В качестве фиксированной демонстрации смотрите http://jsfiddle.net/OlegKi/s2JQB/4/.

  • 8 фев 2020 2020-02-08 08:05:07