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?

JavaScript mit Event onVisformsFormPrepare richtig nutzen

More
1 year 7 months ago - 1 year 4 months ago #9132 by MaliRaj
Ein Radiobutton (Field264) in einem Formular mit den beiden Optionen JA/NEIN soll abhängig von UserLoggedIn JA oder NEIN mit JavaScript im Event onVisformsFormPrepare gesetzt werden und eine manuelle Änderung danach verhindert werden. Das Setzen der Radio-Button erfolgt auch (kann man ganz kurz sehen), wird dann aber scheinbar durch den weiteren Seitenaufbau überschrieben.

Code:
$user = JFactory::getUser(); if (!$user->id) {     $message = "Auswahl nur eingeloggt möglich";     // Java-Script, welches die manuelle Nutzung der Radiobutton Feld F264 für nicht eingeloggte User verhindert     $script = 'jQuery(document).ready(function () {         jQuery("#field264_1").prop("checked", true); // auf NEIN setzen         jQuery("#field264_0").click(function() { // Klick auf JA unterbinden             alert("'.$message.'");             return false;             });         });';     JFactory::getDocument()->addScriptDeclaration($script); }


Kann ich da am Timing etwas ändern oder müsste ich da ganz anders rangehen?

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 1 year 4 months ago by MaliRaj. Reason: Themensymbol geändert [gelöst]

More
1 year 7 months ago - 1 year 7 months ago #9138 by Administrator IV
Replied by Administrator IV on topic JavaScript mit Event onVisformsFormPrepare richtig nutzen
Hallo Heinz,

Visforms benutzt selbst das Event jQuery(document).ready(), um eine Menge JavaScript auf dem Formular und den Feldern ablaufen zu lassen.
Wenn die Felder fertig initialisiert sind, feuert Visforms das JavaScript Custom-Event 'visfieldInitialized'.

Das Custom-Event wird für das HTML <form>-Element mit der id="visform[Formular-ID]" gefeuert.
Wobei [Formular-ID] für die Formular-ID steht.

Dein Code funktioniert, wenn du dieses Event verwendest.

Der folgende Code funktioniert mit meinem Feld F336 wie gewünscht:
Code:
$user = JFactory::getUser(); if (!$user->id) {     $fid = $visforms->id;     $field = "field336";     $message = "Auswahl nur eingeloggt möglich";     $script = '     jQuery(document).ready(function () {         jQuery("#visform'.$fid.'").on("visfieldInitialized", function() {             // console.log("visfieldInitialized started");             jQuery("#'.$field.'_1").prop("checked", true); // auf NEIN setzen             jQuery("#'.$field.'_0").click(function() { // Klick auf JA unterbinden                 alert("'.$message.'");                 return false;             });         });     });';     JFactory::getDocument()->addScriptDeclaration($script); }

Alternativ zur einer Meldung für den Benutzer, kannst du auch einfach alle nicht ausgewählten Optionen deaktivieren.
Trotzdem wird der Feldwert mit dem Formular weiterhin ganz normal mitgeschickt.
Ein 'disabled' auf ein ganzes Control unterdrückt das ja ansonsten (Wert wird nicht mitgeschickt).

Es gibt in diesem Fall aber kein click-Event mehr und eine Meldung an den Benutzer ist nicht länger möglich.
Dafür wären aber alle nicht ausgewählten Optionen optisch ausgegraut.
Anstelle des click-Handlers steht dann einfach folgende Zeile:
Code:
jQuery("[id^='.$field.'_]:not(:checked)").attr("disabled", true);

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: 1 year 7 months ago by Administrator IV.
The following user(s) said Thank You: MaliRaj

More
1 year 7 months ago - 1 year 7 months ago #9140 by MaliRaj
Hallo Ingmar, herzlichen Dank für deine Tipps und die Erklärungen dazu. Das hilft mir enorm weiter.

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 1 year 7 months ago by MaliRaj.

More
1 year 7 months ago - 1 year 7 months ago #9144 by MaliRaj
Ich konnte das jetzt wie gewünscht umsetzen.('$visforms->id' gibt es in meinem Event noch nicht; '$form->id' schafft Abhilfe)
Auch das Deaktivieren aller nicht ausgewählten Optionen ist eine tolle Lösung. Besten Dank für diesen Tipp/Vorschlag!
Was ich noch nicht lösen konnte:
1. den Formular-Parameter "Double-Opt-In" für eingeloggte User zu deaktivieren; ich finde/erkenne in onVisformsFormPrepare weder in $forms, noch in $menu_params, den passenden Parameter
2. die mit dem JavaScript gesetzte Option hat in der FormularKonfiguration, wenn sie per Maus angeklickt wird, ein bedingtes Feld (ein Editor wird eingeblendet). Dieses bedingte Feld wird trotz folgendem Code nicht "nachgeladen" :
Code:
jQuery("#'.$field.'_4").prop("checked", true).trigger("change"); // Option setzen (Nachricht an Webmaster)

Könntest du mir dabei auch behilflich sein?

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 1 year 7 months ago by MaliRaj.

More
1 year 7 months ago #9145 by Administrator IV
Replied by Administrator IV on topic JavaScript mit Event onVisformsFormPrepare richtig nutzen
Hallo Heinz,

hier erstmal kurz zu Frage 2:

Mit dem folgenden JavaScript wird das bedingte Feld vom Typ Textarea mit der ID=342 komplett aus dem Mechanismus herausgenommen und immer angezeigt.
Code:
jQuery('div.field342').removeClass('conditional').css('display', '');
Mit den folgenden JavaScript-Beispielen passiert das gleiche.
Ich habe aber in der Feldkonfiguration der Textarea, Reiter 'Erweitert', Gruppe 'Layout' folgenden Parameter gesetzt:
Parameter 'CSS Klasse Control-Gruppe' = 'vfcg_textarea-1'.
Code:
jQuery('div.vfcg_textarea-1').removeClass('conditional').css('display', '');
In diesem Fall würde auch immer folgendes funktionieren:
Code:
jQuery('.vfcg_textarea-1').removeClass('conditional').css('display', '');

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 :-).

More
1 year 7 months ago - 1 year 7 months ago #9146 by MaliRaj
Dankeschön für deine schnelle Beantwortung!

Code:
jQuery('div.field342').removeClass('conditional').css('display', '');
hat nicht (auf die Schnelle) funktioniert, aber dies (doppelte an Stelle von einfachen Anführungszeichen):

Code:
jQuery("div.'.$field2.'").removeClass("conditional").css("display", ""); // Textarea (Editor) immer anzeigen

Es funktioniert allerdings dann die Validierung (Pflichtfeld, Min.Länge usw.) auch nicht mehr für dieses Feld, das hattest du sicher mit "komplett" gemeint.

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 1 year 7 months ago by MaliRaj.

Moderators: Administrator AVAdministrator IV
Powered by Kunena Forum