From e2e64ac01da38147278f832406fa480fb9dfab1f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 17 Sep 2019 10:08:58 +0200 Subject: [PATCH] Event selector: Prevent race conditions --- src/pretix/static/pretixcontrol/js/ui/typeahead.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pretix/static/pretixcontrol/js/ui/typeahead.js b/src/pretix/static/pretixcontrol/js/ui/typeahead.js index 584fc53836..1e10f53ca5 100644 --- a/src/pretix/static/pretixcontrol/js/ui/typeahead.js +++ b/src/pretix/static/pretixcontrol/js/ui/typeahead.js @@ -11,6 +11,7 @@ $(function () { var $container = $(this); var $query = $(this).find('[data-typeahead-query]').length ? $(this).find('[data-typeahead-query]') : $($(this).attr("data-typeahead-field")); $container.find("li:not(.query-holder)").remove(); + var lastQuery = ""; $query.on("change", function () { if ($container.attr("data-typeahead-field") && $query.val() === "") { @@ -18,9 +19,15 @@ $(function () { $container.find("li:not(.query-holder)").remove(); return; } + lastQuery = $query.val(); + var thisQuery = $query.val(); $.getJSON( $container.attr("data-source") + "?query=" + encodeURIComponent($query.val()) + (typeof $container.attr("data-organizer") !== "undefined" ? "&organizer=" + $container.attr("data-organizer") : ""), function (data) { + if (thisQuery !== lastQuery) { + // Lost race condition + return; + } $container.find("li:not(.query-holder)").remove(); $.each(data.results, function (i, res) { if (res.type === "organizer") {