Ich rendere Ajax-Link wie folgt:
l(t('Click here'), 'mypath', array('attributes' => array('id' => 'my-id', 'class' => array('use-ajax'))));
Wie wird der Bestätigungsdialog angezeigt, bevor eine Ajax-Anfrage aufgerufen wird?
Ich mache es wie folgt in Javascript, wie ich es in diesem Thread gefunden habe :
Drupal.behaviors.module = {
attach: function() {
Drupal.ajax['my-id'].beforeSerialize = function () {
if(confirm('Are you sure?'))
return true;
else
return false;
}
}
}
Wenn ich auf den Link klicke, wird die Ajax-Anfrage nicht aufgerufen, aber der Dialog wird angezeigt. Es ist okay. Das Problem ist, dass nach dem Klicken auf "Abbrechen" im Bestätigungsdialog die Ajax-Anforderung nach dem Schließen des Bestätigungsdialogs aufgerufen wird.
Kann jemand helfen, wie der Bestätigungsdialog funktioniert?
7
ajax
navigation
tomas.teicher
quelle
quelle
options.beforeSerialize
oderoptions.beforeSubmit
anstelle vonbeforeSerialize
? Die Dokumentation ist ziemlich schlecht und ich bin mir nicht sicher, welche dieser 3 der richtige Weg ist, aber Sie sollten weniger als 5 Minuten brauchen, um beide zu testen.Antworten:
Ich denke nicht, dass dies der beste Weg ist, da Sie direkt mit Drupals Ajax-Objekt herumspielen.
Der beste Weg, dies zu tun, besteht darin, im Grunde Ihren eigenen Klick-Handler zu schreiben und die Bestätigung selbst zu bearbeiten und dann selbst einen Drupal AJAX-Aufruf auszulösen.
Hier ist ein Beispiel:
In Ihrer js-Datei:
Im Wesentlichen bedeutet dies:
quelle
Basierend auf der Antwort von @jnpWebDeveloper, jedoch mit einigen Änderungen:
data
Attribut des Elements.ajax-confirm-link.js
quelle
Wenn Sie die Drupal-Datei "ajax.js" überprüfen, ist der Verknüpfungsprozess ein Sonderfall.
Der Kommentar zu "Drupal.ajax.prototype.beforeSerialize" besagt, dass die Funktion niemals aufgerufen wird, wenn es sich nicht um ein Formular handelt.
In diesem Fall wird "options.beforeSerialize" vor dem Aufruf von jQuery ajax verwendet. Wenn Sie hier Ihre Bestätigung durchführen, können Sie auf OK klicken oder abbrechen. Ein Ajax-Anruf wird immer ausgelöst.
Wenn Sie jedoch stattdessen die Funktion "options.beforeSend" überladen, sollte Ihr Bestätigungsfeld möglicherweise funktionieren, da der Ajax-Aufruf abgebrochen wird, wenn diese Funktion false zurückgibt (jQuery Doc: http://api.jquery.com/jQuery.ajax/ ).
Hier ist das Snippet, das in der Datei "ajax.js" verwendet wird
Die aktualisierte Version können Sie ausprobieren:
Ich hatte keine Zeit, dieses Snippet zu testen, Upgrades und Kommentare sind willkommen :)
quelle