From fbf12c007dfa7c9479f8c091014858295ef5fcd9 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Wed, 26 Jul 2017 20:47:36 +0200 Subject: [PATCH] [bug-#317] for multiselect fields not working correctly in admin panel Fixes system config dependencies for multiselect fields --- js/mage/adminhtml/form.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/js/mage/adminhtml/form.js b/js/mage/adminhtml/form.js index da35ff2d1fe7..646d4beb606c 100644 --- a/js/mage/adminhtml/form.js +++ b/js/mage/adminhtml/form.js @@ -511,6 +511,19 @@ FormElementDependenceController.prototype = { levels_up : 1 // how many levels up to travel when toggling element }, + getSelectValues : function(select) { + var result = []; + var options = select && select.options; + var opt; + for (var i = 0, iLen = options.length; i < iLen; i++) { + opt = options[i]; + if (opt.selected) { + result.push(opt.value); + } + } + return result; + }, + /** * Define whether target element should be toggled and show/hide its row * @@ -529,13 +542,20 @@ FormElementDependenceController.prototype = { var shouldShowUp = true; for (var idFrom in valuesFrom) { var from = $(idFrom); - if (valuesFrom[idFrom] instanceof Array) { - if (!from || valuesFrom[idFrom].indexOf(from.value) == -1) { + if (from.tagName === 'SELECT' && from.className.indexOf('multiselect') > -1) { + var elementValues = this.getSelectValues(from); + if (!from || elementValues.indexOf(valuesFrom[idFrom]) <= -1) { shouldShowUp = false; } } else { - if (!from || from.value != valuesFrom[idFrom]) { - shouldShowUp = false; + if (valuesFrom[idFrom] instanceof Array) { + if (!from || valuesFrom[idFrom].indexOf(from.value) == -1) { + shouldShowUp = false; + } + } else { + if (!from || from.value != valuesFrom[idFrom]) { + shouldShowUp = false; + } } } }