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