Joomla 5 Notice

We are pleased to announce that as of January 29, 2024, all of our Joomla extensions are compatible with Joomla 5.

For all who are still updateing from Joomla 3 to Joomla 4: Joomla 4 Migration instructions are available here:

There is now a separate Documentation for Visforms for Joomla 4 and for Visforms for Joomla 5!

Forum

Visforms Subscription user can ask questions in our forum. Please log in with the relevant user first.
Everybody can access the forum for reading.

Please only ask 1 question per topic.

Important information for almost every question:
V1: Which Visforms version is running?
V2: Which Joomla version is running?
V3: Which PHP version is running?

Formular Reset

More
2 weeks 4 days ago #11501 by Schulamt
Formular Reset was created by Schulamt
Lieber Ingmar,
liebes Team,

ich komme an einer Stelle in einem für mich recht komplizierten Formular, in dem einige manuelle bedingte Anzeigen mit vielen Bedingungen umgesetzt werden soll, nicht wirklich weiter.

Ich habe mich daher dazu entschlossen, anstellen komplizierter Bedingungen an einigen Stellen einfach einen Reset durchführen zu lassen, so wie er ausgelöst wird, wenn man den Reset Button des Formulars einfach betätigt.

Dazu habe ich dieses Skript implementiert, was aber zu Loops im Frontend führt:

  function resetAutismusdiagnoseIfNoCheckboxChecked() {
        // Überprüfen, ob mindestens eine Checkbox angehakt ist
        let atLeastOneChecked = Object.values(checkboxIds).some(id => jQuery(`#field${id}`).is(':checked'));
   
        // Falls keine Checkbox angehakt ist, das Formular zurücksetzen
        if (!atLeastOneChecked) {
            jQuery(document).ready(function() {
                // Formular suchen
                var form = jQuery(`#form${idForm}`);
               
                if (form.length) {
                    // Formular zurücksetzen
                    form[0].reset();
   
                    // Leeren aller Eingabefelder (Checkboxen, Radio-Buttons, Select-Boxen, Textfelder)
                    jQuery('input[type="text"], input[type="radio"], input[type="checkbox"], select, textarea').each(function() {
                        jQuery(this).val(''); // Leert Textfelder und Textareas
                        if (this.type === 'checkbox' || this.type === 'radio') {
                            jQuery(this).prop('checked', false); // Setzt Checkboxen und Radio-Buttons zurück
                        }
                    });
                } else {
                    console.error('Das Formular mit der ID ' + idForm + ' wurde nicht gefunden.');
                }
            });
        }


Könntest du mir einen Tipp geben, wie ich den Reset ordentlich durchführen kann?

Vielen Dank!
Michael

More
2 weeks 3 days ago - 2 weeks 2 days ago #11507 by Administrator IV
Replied by Administrator IV on topic Formular Reset
Hallo Michael,

Zu: Tipp geben, wie ich den Reset ordentlich durchführen kann.

Visforms hat keinen eigenen Code, um die Eingabe-Felder zurückzusetzen.
Das Zurücksetzen der Eingabe-Felder erfolgt allein durch Klick auf einen beliebigen HTML-Button mit dem richtigen Typ.
Code:
<input type="reset" ...>

Um das Formular durch JavaScript zurückzusetzen, reicht es aus auf dem Formular-Objekt die Funktion 'reset()' auszuführen, was du ja in dem JavaScript Code an einer Stelle durchführst.
Code:
form[0].reset();

Warum es zu 'Loops' kommt, kann ich anhand deines JavaScript-Ausschnittes allein nicht mit Sicherheit sagen.
'Loops' zu finden erfordert oft die Kenntnis und Untersuchung des gesamten Vorgangs.

Mir fällt allerdings auf, dass du ein 'form[0].reset()' durchführst und gleichzeitige auch Änderung an Formular-Feldern.
Das könnte durchaus zu Problemen führen.
Vielleicht reicht es aus und würde bereits den 'Loop' beheben, wenn du ausschließlich den form[0].reset() durchführst.

Manche Arten von 'Loops' und Blockierungen können durch die Nutzung eines asynchronen Aufrufs gelöst werden.
Wenn du ein 'form[0].reset()' durchführst und gleichzeitige auch Änderung an Formular-Feldern, könntest du den einen Teil davon asynchron ablaufen lassen.
Ich würde in dieser Situation die Änderung an Formular-Feldern in den asynchronen Aufruf verpacken.

Die 'Bitte Warten' Funktion setTimeout() ist eine einfache asynchrone Funktion, die dazu verwendet werden kann.
Sie wird oft allein deswegen eingesetzt und nicht wirklich, weil da etwa gewartet werden müsste.
Code:
console.log("HELLO"); window.setTimeout(function(){ console.log("THIS IS"); }, 2000); console.log("DOG");

Der Code gibt Folgendes in der Konsole aus:
HELLO
DOG
THIS IS

Liebe Grüße, Ingmar

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).
Last edit: 2 weeks 2 days ago by Administrator IV.
The following user(s) said Thank You: MaliRaj

Moderators: Administrator AVAdministrator IV
Powered by Kunena Forum