From 51a042551ddd1fa4346d972ee8eec67da3348b32 Mon Sep 17 00:00:00 2001 From: Marco 'Lubber' Wienkoop Date: Mon, 20 Dec 2021 08:50:49 +0100 Subject: [PATCH] fix(api): empty dropdown data was overriden by previous data Revert and proper fix of #2175 I forgot to check for an empty dropdown value. Jquery unfortunately does not return the field at all on serializeArray when multiple named fields (which should return an array) are empty. --- src/definitions/behaviors/api.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/definitions/behaviors/api.js b/src/definitions/behaviors/api.js index 3b2c1fccb3..71af919b28 100644 --- a/src/definitions/behaviors/api.js +++ b/src/definitions/behaviors/api.js @@ -74,6 +74,7 @@ $.api = $.fn.api = function(parameters) { url, data, requestStartTime, + originalData, // standard module element = this, @@ -86,6 +87,7 @@ $.api = $.fn.api = function(parameters) { initialize: function() { if(!methodInvoked) { + originalData = settings.data; module.bind.events(); } module.instantiate(); @@ -197,7 +199,7 @@ $.api = $.fn.api = function(parameters) { // Add form content if(settings.serializeForm) { - settings.data = module.add.formData(settings.data); + settings.data = module.add.formData(originalData || settings.data); } // call beforesend and get any settings changes @@ -428,7 +430,7 @@ $.api = $.fn.api = function(parameters) { formData = {}, hasOtherData ; - data = data || settings.data; + data = data || originalData || settings.data; hasOtherData = $.isPlainObject(data); $.each($form.serializeArray(), function (i, element) { @@ -443,9 +445,6 @@ $.api = $.fn.api = function(parameters) { } else { formData[element.name] = element.value; } - if(hasOtherData && data[element.name]) { - delete data[element.name]; - } }); if(hasOtherData) {