diff --git a/administrator/components/com_associations/forms/filter_associations.xml b/administrator/components/com_associations/forms/filter_associations.xml index a06dc4b4d9980..a73cc743c0aa1 100644 --- a/administrator/components/com_associations/forms/filter_associations.xml +++ b/administrator/components/com_associations/forms/filter_associations.xml @@ -4,7 +4,7 @@ name="itemtype" type="itemtype" filtermode="selector" - onchange="jQuery('select[id^=\'filter_\']').val('');jQuery('select[id^=\'list_\']').val('');this.form.submit();" + onchange="Joomla.resetFilters(this)" > diff --git a/administrator/components/com_languages/forms/filter_installed.xml b/administrator/components/com_languages/forms/filter_installed.xml index e623bcdd5bf98..6e175742781a5 100644 --- a/administrator/components/com_languages/forms/filter_installed.xml +++ b/administrator/components/com_languages/forms/filter_installed.xml @@ -3,7 +3,7 @@ diff --git a/administrator/components/com_modules/forms/filter_modulesadmin.xml b/administrator/components/com_modules/forms/filter_modulesadmin.xml index 4a1a8dd38f161..7cfca1d96aa14 100644 --- a/administrator/components/com_modules/forms/filter_modulesadmin.xml +++ b/administrator/components/com_modules/forms/filter_modulesadmin.xml @@ -8,7 +8,7 @@ label="" filtermode="selector" layout="default" - onchange="jQuery('#filter_position, #filter_module, #filter_language').val('');this.form.submit();" + onchange="Joomla.resetFilters(this)" > diff --git a/administrator/components/com_templates/forms/filter_styles.xml b/administrator/components/com_templates/forms/filter_styles.xml index c7c4c1b3c059a..1497fc1223bf1 100644 --- a/administrator/components/com_templates/forms/filter_styles.xml +++ b/administrator/components/com_templates/forms/filter_styles.xml @@ -4,7 +4,7 @@ name="client_id" type="list" filtermode="selector" - onchange="jQuery('#filter_search, select[id^=filter_], #list_fullordering').val('');this.form.submit();" + onchange="Joomla.resetFilters(this)" > diff --git a/administrator/components/com_templates/forms/filter_templates.xml b/administrator/components/com_templates/forms/filter_templates.xml index 92ffa0287fb27..407ee3ee2e090 100644 --- a/administrator/components/com_templates/forms/filter_templates.xml +++ b/administrator/components/com_templates/forms/filter_templates.xml @@ -4,7 +4,7 @@ name="client_id" type="list" filtermode="selector" - onchange="jQuery('#filter_search, select[id^=filter_], #list_fullordering').val('');this.form.submit();" + onchange="Joomla.resetFilters(this)" > diff --git a/build/media_src/system/js/core.es6.js b/build/media_src/system/js/core.es6.js index ecdbe8c846a24..cce34636699af 100644 --- a/build/media_src/system/js/core.es6.js +++ b/build/media_src/system/js/core.es6.js @@ -1141,6 +1141,45 @@ window.Joomla.Modal = window.Joomla.Modal || { }; /** + * Method that resets the filter inputs and submits the relative form + * + * @param {HTMLElement} The element that initiates the call + * @returns {void} + * @since 4.0 + */ + Joomla.resetFilters = (element) => { + const { form } = element; + + if (!form) { + throw new Error('Element must be inside a form!'); + } + + const elementsArray = [].slice.call(form.elements); + + if (elementsArray.length) { + const newElementsArray = []; + elementsArray.forEach((elem) => { + // Skip the token, the task, the boxchecked and the calling element + if (elem.getAttribute('name') === 'task' + || elem.getAttribute('name') === 'boxchecked' + || (elem.value === '1' && /^[0-9A-F]{32}$/i.test(elem.name)) + || elem === element) { + return; + } + + newElementsArray.push(elem); + }); + + // Reset all filters + newElementsArray.forEach((elem) => { + elem.value = ''; + }); + + form.submit(); + } + }; + + /* * Method to invoke a click on button inside an iframe * * @param {object} options Object with the css selector for the parent element of an iframe