diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 529fdaac69..fbfdb08fed 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -1867,7 +1867,11 @@ class QuickSetupForm(I18nForm): self.fields['payment_banktransfer_bank_details'].required = False for f in self.fields.values(): if 'data-required-if' in f.widget.attrs: - del f.widget.attrs['data-required-if'] + f.widget.attrs['data-required-if'] += ",#id_payment_banktransfer__enabled" + + self.fields['payment_banktransfer_bank_details'].widget.attrs["data-required-if"] = ( + "#id_payment_banktransfer_bank_details_type_1,#id_payment_banktransfer__enabled" + ) def clean(self): cleaned_data = super().clean() diff --git a/src/pretix/static/pretixcontrol/js/ui/main.js b/src/pretix/static/pretixcontrol/js/ui/main.js index 1082852ec9..ed24303c2a 100644 --- a/src/pretix/static/pretixcontrol/js/ui/main.js +++ b/src/pretix/static/pretixcontrol/js/ui/main.js @@ -415,16 +415,24 @@ var form_handlers = function (el) { el.find("input[data-required-if], select[data-required-if], textarea[data-required-if]").each(function () { var dependent = $(this), - dependency = $($(this).attr("data-required-if")), + dependencies = $($(this).attr("data-required-if")), update = function (ev) { - var enabled = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val(); + var enabled = true; + dependencies.each(function () { + var dependency = $(this); + var e = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val(); + enabled = enabled && e; + }); dependent.prop('required', enabled).closest('.form-group').toggleClass('required', enabled).find('.optional').stop().animate({ 'opacity': enabled ? 0 : 1 }, ev ? 500 : 1); }; update(); - dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update); - dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update); + dependencies.each(function () { + var dependency = $(this); + dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update); + dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update); + }); }); el.find("div.scrolling-choice:not(.no-search)").each(function () { diff --git a/src/pretix/static/pretixpresale/js/ui/main.js b/src/pretix/static/pretixpresale/js/ui/main.js index c83eb3409c..5cf8efa192 100644 --- a/src/pretix/static/pretixpresale/js/ui/main.js +++ b/src/pretix/static/pretixpresale/js/ui/main.js @@ -514,13 +514,17 @@ $(function () { $("input[data-required-if], select[data-required-if], textarea[data-required-if]").each(function () { var dependent = $(this), dependentLabel = $("label[for="+this.id+"]"), - dependency = $($(this).attr("data-required-if")), + dependencies = $($(this).attr("data-required-if")), update = function (ev) { - var enabled = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val(); + var enabled = true; + dependencies.each(function () { + var dependency = $(this); + var e = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val(); + enabled = enabled && e; + }); if (!dependent.is("[data-no-required-attr]")) { dependent.prop('required', enabled); } - dependent.closest('.form-group').toggleClass('required', enabled); if (enabled) { dependentLabel.append('' + gettext('required') + ''); } @@ -529,8 +533,11 @@ $(function () { } }; update(); - dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update); - dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update); + dependencies.each(function () { + var dependency = $(this); + dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update); + dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update); + }); }); $("input[data-display-dependency], div[data-display-dependency], select[data-display-dependency], textarea[data-display-dependency]").each(function () {