VorwortHeute 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-SymbolleisteTabelle.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überwachungTabelle.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örzellenTabelle.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. AbschlussDies 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:
|
<<: Lösung für BT Baota Panel php7.3 und php7.4 unterstützen ZipArchive nicht
>>: Verstehen Sie kurz die MySQL-Datenbankoptimierungsphase
In diesem Artikelbeispiel wird der spezifische Co...
Wenn die Tabelle Zehntausende Datensätze enthält,...
Inhaltsverzeichnis 1.mysqldump Ausführungsprozess...
Inhaltsverzeichnis Verwendung von this.$set in Vu...
Finden Sie das Problem Ich habe vorher eine einfa...
Problembeschreibung Nach der Installation von Wor...
Vorwort Die neueste Version von MySQL 8.0 ist 8.0...
Inhaltsverzeichnis 1. Panorama II. Hintergrund 1....
Wie wähle ich mit CSS rekursiv alle untergeordnet...
1. Was ist mycat Ein vollständig Open Source-Groß...
In diesem Artikel wird eine detaillierte Erläuter...
flexibles Layout Definition: Das Element des Flex...
Inhaltsverzeichnis einführen Objektattribute in R...
Wie kann ich im offiziellen MySQL-Dump-Tool nur e...
Downloadadresse der offiziellen MySQL-Website: ht...