Ich muss einige zusätzliche Dinge tun, nachdem Drupal Ajax einige Dinge in das DOM eingefügt hat. Mit jQuery war das hirntot einfach, aber ich kann für mein ganzes Leben nicht herausfinden, wie es in Drupal 7: s geht
Füge ich meinem ajaxifizierten Link etwas hinzu? Ich habe etwas über das Anhängen eines Verhaltens gelesen ... Verwirrung setzt ein ...
7
ajax
javascript
Etwas auf
quelle
quelle
Antworten:
Am Ende habe ich der Seite, die vom Ajax-Handler zurückgegeben wird, einige Additionsbefehle hinzugefügt:
Und auf der Client-Seite habe ich über jQuery 2 Javascript-Funktionen erstellt:
quelle
In meinem Projekt hatte ich bereits gut definierten JavaScript-Code geschrieben, der die Seitenstatistiken nach einem AJAX-Aufruf aktualisierte.
Da ich die Funktionen wiederverwenden wollte, ohne "jQuery zu erweitern", kam ich zu der folgenden Lösung, bei der eine vorhandene jQuery-Funktion verwendet wurde, anstatt eine neue zu definieren. Dies wurde durch die Funktionsweise des "Flags" -Moduls inspiriert - es löst einfach ein Ereignis aus und ermöglicht es vielen Javascript-Ereignis-Listenern, als Reaktion darauf zu reagieren, anstatt nur ein einziges fest codiertes, benutzerdefiniertes jQuery-Plugin / eine Erweiterung wie in der Lösung zu haben in den vorherigen Antworten untersucht.
In einem Drupal-Modul:
In Javascript:
Ich musste beachten, dass der erste Parameter für ajax_command_invoke NIEMALS native JavaScript-Objekte sind, daher funktioniert Folgendes nie, da es in einen Selektor 'document' (Element) übersetzt wird:
Seltsamerweise sind Binden
$(document)
und Auslösen$('html')
kompatibel. Ich nehme an, Sie können sehr kreativ werden und spezifischere Elemente auf tieferer Ebene binden / auslösen. Wenn Sie sich ein Szenario vorstellen können, in dem dies sinnvoller ist als ein Ereignisauslöser der obersten Ebene, kommentieren Sie dies bitte!quelle
Ich denke, dass die beste Option die Verwendung der jQuery-
ajaxComplete
Funktion ist:Und wenn Sie die Funktion für eine bestimmte Ajax-Funktion verwenden möchten, können Sie die identifizierte settings.url für Ihr Feld verwenden und diese ändern in:
Dies funktionierte bei mir für die Drupal 7 und 8.
quelle
Codebeispiel:
JS-Code:
quelle
Schnelle Hack-Lösung: Platzieren Sie ein Bild im geladenen Inhalt und geben Sie ihm das
onload="[javascript function]()"
Attribut. Sie sind sich nicht sicher, ob dies tatsächlich das ist, wonach Sie suchen ... Oder ob dies einfacher als der richtige Weg ist ... Aber vielleicht besser als nichts?quelle
Ich habe eine Antwort auf diese Frage auf so gepostet
https://stackoverflow.com/a/19404566/894487
Ich bin mir nicht sicher über die wirklichen Unterschiede zwischen Erweiterung
Drupal.ajax.prototype.commands
oder$.fn
Ich stelle mir vor, dass Ersteres effizienter wäre, da keine Dom-Durchquerung erforderlich ist, um Ihre Funktion zu erfüllen. Ich bin mir nicht sicher, ob das wichtig ist.
quelle
Ich habe in Drupal 7 ein Tutorial dazu geschrieben: https://www.jaypan.com/tutorial/calling-function-after-ajax-event-drupal-7
quelle