Daten in der Layui-Tabellenzeile dynamisch bearbeiten

Daten in der Layui-Tabellenzeile dynamisch bearbeiten

Vorwort

Heute möchte ich Ihnen einige dynamische Tabellendatenoperationen im klassischen Front-End-Framework layui vorstellen, kombiniert mit JQuery, um die Daten in der Zelle dynamisch zu bearbeiten. Ich hoffe, es kann den Bedürftigen helfen. Kommt, lasst uns einander ermutigen!

Stil Funktion Beschreibung

Initialisierungscode

Laut der Layui-Entwicklungsdokumentation können wir problemlos den folgenden Code schreiben, um integrierte Komponenten zu laden und Tabellendaten dynamisch auszufüllen:

layui.use(Funktion () {
    lass layer = layui.layer,
        Element = layui.element,
        Tabelle = layout.table,
        form = layui.form;
    //Geben Sie das Bearbeitungsfeld an const field = ['typeName'];
    //Tabelle lädt Daten table.render({
        Element: "#newsTypeTable",
        Höhe: 522,
        URL: Serverbasis + "newsType/all",
        parseData: Funktion (res) {
            zurückkehren {
                "Code": Res.Code,
                "Daten": res.data.types,
                "Anzahl": res.data.count
            };
        },
        // Paging aktivieren page: true,
        Anfrage: {
            Seitenname: "Offset",
            limitName: "Seitengröße"
        },
        Symbolleiste: `
            <div>
                {{# if(checkPermission(1, null)){ }}
                    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="hinzufügen">
                        <i Klasse = "layui-Symbol layui-Symbol-Addition"></i>
                    </button>
                {{# } }}
                {{# if(checkPermission(3, null)){ }}
                    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="batchDel">
                        <i Klasse = "layui-icon layui-icon-subtraktion"></i>
                    </button>
                {{# } }}
            </div>
        `,
        Standardsymbolleiste: [],
        Spalten: [
                [
                    {Typ: 'Kontrollkästchen', fest: 'links'},
                    {Feld: 'id', Titel: 'ID', Sortieren: wahr, Ausrichten: 'zentriert'},
                    {field: 'typeName', title: 'Nachrichtenkategorie', align: 'center'},
                    {Titel: ‚Operation‘, fest: ‚rechts‘, Breite: 200, Ausrichtung: ‚Mitte‘, Symbolleiste: ‚#myBar‘}
                ]
        ],
        text: {
            keine: „Einsamkeit zeigen~“
        }
    });
});

veranschaulichen

Fordern Sie zunächst die Backend-Daten an und weisen Sie die angeforderten Daten durch Datenanalyse zu. Hinweis: Wenn die Paging-Funktion aktiviert ist, muss das Backend die Gesamtzahl der angezeigten Elemente übergeben. Wenn die Seite geöffnet wird, lautet die standardmäßig gesendete Paging-Anforderung ...?page=1&limit=10. Ändern Sie den Parameternamen, der über das Anforderungsattribut übergeben wird. Beispielsweise wird meine Paging-Anforderung in ...all?offset=1&pageSize=10 geändert.

Nach dem Öffnen der Symbolleiste wird die Standard-Header-Symbolleiste rechts geöffnet. Wenn Sie sie nicht benötigen, müssen Sie den Attributwert defaultToolbar auf leer setzen. Und wenn Sie die Symbolleiste anpassen, muss das HTML-Tag-Element im Div-Tag platziert werden, damit es wirksam wird. Dies ist eine Regel.

Toobar verwendet die Layui-Vorlagensyntax, um die Berechtigungen des aktuellen Administrators zu überprüfen. Wenn die Berechtigungen nicht verfügbar sind, werden sie nicht angezeigt.

Aktivieren Sie das Kontrollkästchen mit {type: 'checkbox', fixed: 'left'} und fixieren Sie es an der äußersten linken Position in der Tabelle.

Führen Sie in der Aktionsleiste eine externe benutzerdefinierte Symbolleiste nach ID ein

<script type="text/html" id="meineBar">
    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="bearbeiten">
        <i class="layui-icon layui-icon-edit"></i>
    </button>
    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="del">
        <i class="layui-icon layui-icon-delete"></i>
    </button>
</Skript>

Hinzufügen von Ereignis-Listenern

Listener-Symbolleiste

Tabelle.Ein('Werkzeugleiste(newsTypeList)', Funktion(Objekt) {
    let checkStatus = table.checkStatus(obj.config.id);
    // Ausgewählte Zeilendaten let selectedData = checkStatus.data;
    wenn(Objekt.Ereignis === 'Hinzufügen') {
        // Zur Seite zum Hinzufügen des Newstyps springen window.open('addNewsType.html', 'mainFrame');
    }sonst wenn(obj.event === 'batchDel') {
        wenn(selectedData.length > 0) {
            lass ids = [];
            selectedData.forEach((targetRow) => {
                ids.push(Zielzeile.id)
            });
            layer.confirm(`Möchten Sie ID[${ids}] wirklich löschen?`, {title: 'Warnung', icon: 0},
                Funktion (Index) {
                    $.ajax({
                        Typ: "LÖSCHEN",
                        Inhaltstyp: "application/json;Zeichensatz=UTF-8",
                        URL: Serverbasis + "newsType/del",
                        Daten: JSON.stringify(ids),
                        Datentyp: "json",
                        Erfolg: Funktion (res) {
                            wenn (handleResponseData(res, layer)) {
                                // Nach erfolgreichem Löschen Seite neu laden setTimeout(function () {
                                    location.href = "newsTypeList.html";
                                }, Verzögerungszeit);
                            }
                        }
                    });
                    Ebene.schließen(Index);
                }
            );
        }anders {
            layer.msg('Bitte wählen Sie mindestens eine Zeile aus', {icon: 3});
        }
    }
});

Die öffentliche JS-Datei definiert serverBase (Basisadresse des Anforderungs-Backends), delayTime (Verzögerungszeit des Nachrichten-Popups) und die Funktion handleResponseData, die die Verarbeitung der zurückgegebenen Daten kapselt.

An diesem Punkt wurden die beiden Funktionen der Kopfzeilensymbolleiste realisiert. Es ist relativ einfach, oder?

Symbolleiste für die Tabellenzeilenüberwachung

Tabelle.auf('Tool(NewsTypeList)', Funktion (Objekt) {
    // Den dem Lay-Event entsprechenden Wert abrufen (oder den dem Event-Parameter im Header entsprechenden Wert)
    var layEvent = obj.event;
    // Zeilendatenobjekt abrufen var data = obj.data;
    Schalter (layEvent) {
        Fall 'Bearbeiten':
            const Zeile = obj.tr;
            const field_td = row.find(`[Datenfeld$=${Feld[0]}]`);
            field_td.data('bearbeiten', true);
            Zeile[0].onclick = Funktion() {
                setzeTimeout(Funktion () {
                    field_td[0].lastChild.onblur = Funktion () {
                        row.find('[Datenfeld$=Typname]').data('Bearbeiten', false);
                    }
                }, 10);
            };
            brechen;
        Fall 'del':
            lass ids = [];
            ids.push(Daten-ID);
            layer.confirm(`Sind Sie sicher, dass Sie die Zeile löschen möchten, in der sich ID => ${ids[0]} befindet?`, function(index) {
                //Löschbefehl an den Server senden$.ajax({
                    Typ: "LÖSCHEN",
                    Inhaltstyp: "application/json;Zeichensatz=UTF-8",
                    URL: Serverbasis + "newsType/del",
                    Daten: JSON.stringify(ids),
                    Datentyp: "json",
                    Erfolg: Funktion (res) {
                        wenn (handleResponseData(res, layer)) {
                            setzeTimeout(Funktion () {
                                // Lösche die DOM-Struktur der entsprechenden Zeile (tr) und aktualisiere den Cache obj.del();
                            }, Verzögerungszeit);
                        }
                    }
                });
                Ebene.schließen(Index);
            });
            brechen;
    }
});

Das Löschen einer Zeile ist ganz einfach. Klicken Sie einfach auf die Zeile, um die ID des zu löschenden Objekts abzurufen, und übergeben Sie sie an das Backend, um die Daten der entsprechenden Zeile zu löschen.

Es ist etwas schwierig, die Bearbeitung durch Klicken auf die Schaltfläche „Bearbeiten“ in der Zeile zu implementieren. Nachdem Sie auf die Schaltfläche geklickt haben, müssen Sie zunächst die Bearbeitung des vereinbarten Felds öffnen. Das heißt, nach dem Klicken wird ein Eingabefeld angezeigt, in dem Sie Änderungen vornehmen und aktualisieren können. Wenn das Eingabefeld den Fokus verliert, müssen Sie den Bearbeitungseingang sofort schließen. Das heißt, das Eingabefeld wird nicht erneut angezeigt, wenn Sie erneut darauf klicken.

// Bearbeitung des angegebenen Felds aktivieren. Um die Bearbeitung zu deaktivieren, übergeben Sie „false“ als Parameter. obj.tr.find(`[data-field$=${field[0]}]`).data('edit', true);

Unter diesen gibt „Feld“ den Namen des Bearbeitungsfelds an, der mit dem Feldattributwert im „Cols“-Attribut übereinstimmt.

//Geben Sie das Bearbeitungsfeld an const field = ['typeName'];

Verwenden Sie die Suchfunktion in JQuery, um die der Zelle entsprechende Beschriftung zu finden. Verwenden Sie dann die Datenfunktion, um das Bearbeitungsattribut hinzuzufügen und es auf den wahren Wert zu initialisieren, der folgendem entspricht: {Feld: ‚Typname‘, Titel: ‚Nachrichtenkategorie‘, Ausrichtung: ‚Mitte‘, Bearbeitung: wahr}

Da das Eingabefeld nach dem Klicken auf die entsprechende Zelle angezeigt wird, wird ein Klickereignis für die Zelle registriert. Das Eingabefeld kann jedoch nicht unmittelbar nach dem Klickereignis abgerufen werden. Es kommt zu einer Verzögerung bei der Aktualisierung der DOM-Struktur, und es wird einige Zeit benötigt, um den Abruf zu verzögern.

Durch das Debuggen des Browsers wird festgestellt, dass das letzte untergeordnete Element im übergeordneten Element der Zelle td eingegeben wird. Fügen Sie ein Fokusverlustereignis hinzu. Wenn es ausgelöst wird, wird der Bearbeitungseingang geschlossen und die Schaltfläche muss erneut gedrückt werden, um ihn zu öffnen.

Zeile[0].onclick = Funktion() {
    setzeTimeout(Funktion () {
        field_td[0].lastChild.onblur = Funktion () {
            row.find('[Datenfeld$=Typname]').data('Bearbeiten', false);
        }
    }, 10);
};

Abhörzellen

Tabelle.Ein('Bearbeiten(NewsTypeList)', Funktion(Objekt) {
    let value = obj.value // Den geänderten Wert abrufen, data = obj.data // Alle Schlüsselwerte in der Zeile abrufen, field = obj.field; // Das geänderte Feld abrufen let modifiedData = {id: data.id};
    modifiedData[Feld] = Wert;
    $.ajax({
        Typ: "POST",
        Inhaltstyp: "application/json;Zeichensatz=UTF-8",
        URL: Serverbasis + "Newstyp/Update",
        Daten: JSON.stringify(modifizierteDaten),
        Datentyp: "json",
        Erfolg: Funktion (Res) {
            wenn(!handleResponseData(res, layer)) {
                setzeTimeout(Funktion () {
                    location.href = "newsTypeList.html";
                }, Verzögerungszeit);
            }
        }
    });
});

Abschließend wird das geänderte Objekt übergeben und eine Aktualisierungsanfrage gesendet. Der geänderte Wert kann im Hintergrund überprüft werden. Wenn die Änderung fehlschlägt, wird die aktuelle Seite aktualisiert.

Abschluss

Dies ist das Ende dieses Artikels über die dynamische Bearbeitung von Daten in Layui-Tabellenzeilen. Weitere relevante Inhalte zur dynamischen Bearbeitung von Layui-Tabellen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Die Django Layui-Schnittstelle klickt auf das Popup-Dialogfeld und fordert die Logik zum Generieren einer dynamischen Tabelleninstanz mit Paging an
  • Detaillierte Erklärung der dynamischen Änderungen dynamischer Spalten (Felder) in Layui-Datentabellen
  • So ändern Sie die Tabellenüberschrift und laden die Tabelle in der Layui-Tabelle dynamisch neu
  • Layui-Layout und Tabellen-Rendering sowie Methoden zur dynamischen Tabellengenerierung
  • So implementieren Sie die dynamische Anzeige von Schaltflächen in der Operationsspalte der Layui-Tabelle
  • Layui-Methode zum dynamischen Hinzufügen einer Zeile zur Datentabelle und Springen zu der Seite, auf der sich die hinzugefügte Zeile befindet

<<:  Lösung für BT Baota Panel php7.3 und php7.4 unterstützen ZipArchive nicht

>>:  Verstehen Sie kurz die MySQL-Datenbankoptimierungsphase

Artikel empfehlen

Vue implementiert einen Countdown zwischen angegebenen Daten

In diesem Artikelbeispiel wird der spezifische Co...

MySQL-Lösung zur Datenpaging-Abfrageoptimierung auf Millionenebene

Wenn die Tabelle Zehntausende Datensätze enthält,...

So kopieren Sie eine MySQL-Tabelle

Inhaltsverzeichnis 1.mysqldump Ausführungsprozess...

Detaillierte Erklärung zur Verwendung von this.$set in Vue

Inhaltsverzeichnis Verwendung von this.$set in Vu...

Lösung für das img-Tag-Problem unter IE10

Finden Sie das Problem Ich habe vorher eine einfa...

Vue und React im Detail

Inhaltsverzeichnis 1. Panorama II. Hintergrund 1....

Detaillierte Erklärung, wie Sie alle untergeordneten Elemente mit CSS auswählen

Wie wähle ich mit CSS rekursiv alle untergeordnet...

Installation und Verwendung der MySQL MyCat-Middleware

1. Was ist mycat Ein vollständig Open Source-Groß...

Detaillierte Erklärung der Routenkonfiguration von Vue-Router

Inhaltsverzeichnis einführen Objektattribute in R...