(function () {
var TRAINING_ID_FIELD_ID = 4;
var CHECKBOX_FIELD_ID = 5;
var CHECKBOX_VALUE = "Choice_1";
var isSyncing = false;
function isRowChecked(row) {
return !!(row && row.value && row.value.length > 0);
}
function setCheckbox(rowIndex) {
var target = { fieldId: CHECKBOX_FIELD_ID, index: rowIndex };
var attempts = [
{ value: [CHECKBOX_VALUE] },
{ value: [CHECKBOX_VALUE], otherChoiceValue: "" },
{ value: { value: [CHECKBOX_VALUE], otherChoiceValue: "" } }
];
for (var i = 0; i < attempts.length; i++) {
try {
LFForm.setFieldValues(target, attempts[i]);
return;
} catch (e) {}
}
}
LFForm.onFieldChange(function () {
if (isSyncing) return;
var trainingIdValues = LFForm.getFieldValues({ fieldId: TRAINING_ID_FIELD_ID }) || [];
var checkboxValues = LFForm.getFieldValues({ fieldId: CHECKBOX_FIELD_ID }) || [];
var checkedIds = {};
for (var i = 0; i < checkboxValues.length; i++) {
if (isRowChecked(checkboxValues[i]) && trainingIdValues[i]) {
checkedIds[trainingIdValues[i]] = true;
}
}
var rowsToUpdate = [];
for (var r = 0; r < trainingIdValues.length; r++) {
if (checkedIds[trainingIdValues[r]] && !isRowChecked(checkboxValues[r])) {
rowsToUpdate.push(r);
}
}
if (rowsToUpdate.length === 0) return;
isSyncing = true;
rowsToUpdate.forEach(setCheckbox);
setTimeout(function () { isSyncing = false; }, 100);
}, { fieldId: CHECKBOX_FIELD_ID });
})();
Change the IDs to match your field IDs and whatever value you are using for the checkbox. This one worked for me.