jqGrid - cellen met TD-elementen erin

Het lijkt erop dat er een probleem is met jQuery Grid (jqGrid) als ik gegevens heb geladen waarbij een van de cellen een tabel bevat, wordt er een fout gegenereerd wanneer onSelectRow() wordt geactiveerd en ik $ (grid) .getRowData (rowid) .

jqGrid lijkt ALLE TD-elementen in de geselecteerde rij op te sommen (inclusief die welke kinderen zijn van de tabel in een bepaalde cel).

Is er een goede manier om dit te doen of om te voorkomen dat jqGrid die elementen opsomt? :(

EDIT: in mijn specifieke geval was de HTML verborgen totdat dit nodig was, dus ik kon de TD's vervangen door "xtd" op de server totdat deze naar de client werd verzonden. Aan de clientzijde, toen ik ze HTML nodig had, heb ik gewoon "xtd" vervangen door "td". Ik wou dat er een betere manier was.

EDIT: Ik wil verduidelijken, ik wens een methode om dit te doen die de plug-in niet wijzigt. Een goed geschreven wijziging zou nog steeds leuk zijn.

0

2 antwoord

Oud maar nog niet opgelost.

Hi. Yes jqGrid has problem with inner table and td but there is a quick and useful fix. In file jquery.jqGrid.min (jqGrid 3.8.2 - jQuery Grid). Put file into js-beutifier or get not minified version and find getRowData function. Then you have to add extra condition to lookup foreach b("td", r).each(function (t) { to code b("td[id!='-1']", r).each(function (t) {. In your inner table you should declare <td id="-1">. In this case you exclude your td from searching in colModel.

Copy/Paste this code:

getRowData: function (f) {
            var j = {},
                i, c = false,
                e, k = 0;
            this.each(function() {
                var n = this,
                    a, r;
                if (typeof f == "undefined") {
                    c = true;
                    i = [];
                    e = n.rows.length
                } else {
                    r = n.rows.namedItem(f);
                    if (!r) return j;
                    e = 2
                }
                for (; k < e;) {
                    if (c) r = n.rows[k];
                    if (b(r).hasClass("jqgrow")) {
                        b("td[id!='-1']", r).each(function (t) {//fix
                            a = n.p.colModel[t].name;
                            if (a !== "cb" && a !== "subgrid" && a !== "rn") if (n.p.treeGrid === true && a == n.p.ExpandColumn) j[a] = b.jgrid.htmlDecode(b("span:first", this).html());
                            else try {
                                j[a] = b.unformat(this, {
                                    rowId: r.id,
                                    colModel: n.p.colModel[t]
                                }, t)
                            } catch (B) {
                                j[a] = b.jgrid.htmlDecode(b(this).html())
                            }
                        });
                        if (c) {
                            i.push(j);
                            j = {}
                        }
                    }
                    k++
                }
            });
            return i ? i : j
        }

Finally where you want to put inner table do this:

<table>
    <tr>
        <td id="-1">
            Now It's working!
        </tr>
        <td id="-1">
            Yeah
        </tr>
    </tr>
</table>

Of course you can change id attribute but I recommend fix this with html id attribute due to jQuery performance against class attribute.

1
toegevoegd
Bedankt voor het oplossen van dit! :) Ik zal deze of soortgelijke oplossingen in de toekomst gebruiken. Veel schoner dan wat ik eerder had.
toegevoegd de auteur aikeru, de bron

Er is nog een optie die ik heb geïmplementeerd. In plaats van het manipuleren van jqGrid core javascript, waarom dan niet th tags gebruiken in plaats van td tags in de Cell die je aan het maken bent in een Table.

Ik had een soortgelijke vereiste en ging door met de bovenstaande implementatie (manipulatie jqgrid.min.js). Maar wat er dan gebeurt, is dat er een mismatch is met de kolom # en de cel # die we proberen op te halen. Ik moest bijvoorbeeld een cel dynamisch instellen. Hoewel de kolom-id correct was, was het bewerken/wijzigen van een andere cel (er waren extra td-tags in een van de cellen).

Ik ging door en gebruikte th in plaats van td-tags voor de aangepaste tabel die ik binnen een cel maak. Werkt tot nu toe.

0
toegevoegd