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