diff --git a/src/pretix/static/pretixbase/js/addressform.js b/src/pretix/static/pretixbase/js/addressform.js index 3c5015756e..60890bcc66 100644 --- a/src/pretix/static/pretixbase/js/addressform.js +++ b/src/pretix/static/pretixbase/js/addressform.js @@ -2,10 +2,11 @@ $(function () { "use strict"; $("select[data-country-information-url]").each(function () { - let counter = 0; + let xhr; const dependency = $(this), + loader = $("").hide().prependTo(dependency.closest(".form-group").find("label")), url = this.getAttribute('data-country-information-url'), - form = $(this).closest(".panel-body, form, .profile-scope"), + form = dependency.closest(".panel-body, form, .profile-scope"), isRequired = dependency.closest(".form-group").is(".required"), dependents = { 'city': form.find("input[name$=city]"), @@ -15,17 +16,15 @@ $(function () { 'vat_id': form.find("input[name$=vat_id]"), }, update = function (ev) { - counter++; - const curCounter = counter; + if (xhr) { + xhr.abort(); + } for (var k in dependents) dependents[k].prop("disabled", true); - dependency.closest(".form-group").find("label").prepend(" "); - $.getJSON(url + '?country=' + dependency.val(), function (data) { - if (counter > curCounter) { - return; // Lost race - } + loader.fadeIn(); + xhr = $.getJSON(url + '?country=' + dependency.val(), function (data) { var selected_value = dependents.state.prop("data-selected-value"); if (selected_value) dependents.state.prop("data-selected-value", ""); - dependents.state.find("option").filter(function (t) {return !!$(this).attr("value")}).remove(); + dependents.state.find("option:not([value=''])").remove(); if (data.data.length > 0) { $.each(data.data, function (k, s) { var o = $("