From 6f78113ee353a2e65c16c558c54c931abdbb15d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 22 May 2020 11:18:16 -0400 Subject: [PATCH] fix: prevent duplicate search triggers if app.handleSearch is called from a plugin in action:ajaxify.end events are fired multiple time --- public/src/app.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 8d8568e9cf..2a111b911d 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -574,12 +574,13 @@ app.cacheBuster = null; var inputEl = options.inputEl; var template = options.template || 'partials/quick-search-results'; var searchTimeoutId = 0; - inputEl.on('keyup', function () { + var currentVal = inputEl.val(); + inputEl.off('keyup').on('keyup', function () { if (searchTimeoutId) { clearTimeout(searchTimeoutId); searchTimeoutId = 0; } - if (inputEl.val().length < 3) { + if (inputEl.val().length < 3 || inputEl.val() === currentVal) { return; } @@ -618,15 +619,15 @@ app.cacheBuster = null; var searchInput = $('#search-fields input'); var quickSearchResults = $('#quick-search-results'); - $('#search-form .advanced-search-link').on('mousedown', function () { + $('#search-form .advanced-search-link').off('mousedown').on('mousedown', function () { ajaxify.go('/search'); }); - $('#search-form').on('submit', function () { + $('#search-form').off('submit').on('submit', function () { searchInput.blur(); }); - searchInput.on('blur', dismissSearch); - searchInput.on('focus', function () { + searchInput.off('blur').on('blur', dismissSearch); + searchInput.off('focus').on('focus', function () { if (searchInput.val() && quickSearchResults.children().length) { quickSearchResults.removeClass('hidden').show(); } @@ -645,7 +646,7 @@ app.cacheBuster = null; }, 200); } - searchButton.on('click', function (e) { + searchButton.off('click').on('click', function (e) { if (!config.loggedIn && !app.user.privileges['search:content']) { app.alert({ message: '[[error:search-requires-login]]', @@ -660,7 +661,7 @@ app.cacheBuster = null; return false; }); - $('#search-form').on('submit', function () { + $('#search-form').off('submit').on('submit', function () { var input = $(this).find('input'); require(['search'], function (search) { var data = search.getSearchPreferences();