Hallo Heinz,
vielen Dank für das das Akeeba-Backup!
Zu: Wie erreiche ich denn unter diesen Umständen, dass meine Funktionen wirklich nur auf eine Änderung von Werten reagieren?
Der Code nutzt eine Status-Variable, um sich das manuell ausgelöste 'change' des Radio-Feldes zu merken.
Der Code macht im Kommentar den Unterschied,
- ob das Radio-Feld aktuell geändert wurde
(Rücksetzen der Status-Variable erforderlich)
- oder ob das Radio-Feld erstmalig, also mindestens einmalig, geändert wurde
(Rücksetzen der Status-Variable nicht erforderlich).
Das für dich interessante Event im Logging ist: 'radio changed beforehand: sqlField'
Bedeutet: Es gab ein Reload des SQL-Feldes und davor wurde das Radio-Feld geändert.
Hier der passende Code:
Code:
// initialize after document is ready
jQuery(document).ready(function() {
let radioField = 'form2radio'; // Radio
let sqlField = 'field16'; // SelectSQL
let radioChanged = false; // State variable: radio got changed
// form is initialized
jQuery('.visform').bind('visformsInitialised', function() {
console.log('form initialized');
});
// SQL field
$('#' + sqlField).on('change', function() {
console.log('changed: sqlField');
// only if radio has changed beforehand
if(radioChanged) {
console.log('radio changed beforehand: sqlField');
// following line is necessary only
// 1: if multiple fields trigger the SQL field reload
// 2: and you want to react to then reload only after the Radio field has changed
// otherwise: the state variable may keep the value of 'true' (first time initialization)
radioChanged = false;
}
});
$('#' + sqlField).on('reloadsqloptions', function() {
console.log('reloadsqloptions: sqlField');
});
// radio field
$(`input[name="${radioField}"]`).on('change', function() {
console.log('changed: radioField');
radioChanged = true
});
$(`input[name="${radioField}"]`).on('reloadsqloptions', function() {
console.log('reloadsqloptions: radioField');
});
});
Hier das Konsole-Logging.
Die Kommentarzeilen und leeren Zeilen sind nicht im originalen Logging enthalten.
Code:
// Formular startet
reloadsqloptions: radioField
reloadsqloptions: sqlField
form initialized
changed: sqlField
// Radio Wert manuell umgestellt
changed: radioField
changed: sqlField
radio changed beforehand: sqlField
// Radio Wert manuell umgestellt
changed: radioField
changed: sqlField
radio changed beforehand: sqlField
Hinweis:
Im Unterschied zu deiner Beschreibung oben, tritt in meiner Joomla-Instanz aus deinem Akeeba-Backup folgendes auf:
Ohne dass etwas eingegeben oder geändert wird, wird das change-Event des SQL-Feldes nur genau 1x gefeuert.
Liebe Grüße, Ingmar