- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2018 09:28 AM
Clear list collector selected values when some field is changed in Service Portal.
When I change the value of one variable, a choice list, on a catalog item, I want the values from a list collector all cleared out. I have managed to achieve this with help from this forum. Trouble is, I have had to create one script for the portal, and one for desktop view. here they are list below. Can I achieve the same results with one script only which will work in Portal and desktop views? "add_user_to_group" is my list collector name. Many thanks. Mark S.
Portal script:
Works in portal
Name:
Clear values on change
Type: onChange
UI Type: Mobile/Portal *** THIS IS IMPORTANT *****
----------------------------------------------------------------------------------------------------------------------------------------------------------
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var collectorName = 'add_user_to_group'; //Name of your list collector.
var myListCollector = g_list.get(collectorName);
var selectedOptions = g_form.getValue(collectorName).split(',');
if((selectedOptions != "") && (selectedOptions.length > 0)){
//Remove items
var index = 0;
for (var i = 1, leng = selectedOptions.length+1; i < leng; i++){
myListCollector.removeItem(selectedOptions[selectedOptions.length-i]);
index++;
alert(" ** changed in portal ***");
}
}
}
--------------------------------------------------------------------------------------------------------------
Works in classic view
Name:
Clear values on change
Type: onChange
UI Type: Desktop *** THIS IS IMPORTANT *****
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//Type appropriate comment here, and begin script below
var listCollectorName = 'add_user_to_group'; //Name of your list collector.
var leftBucket = gel(listCollectorName + '_select_0');
var rightBucket = gel(listCollectorName + '_select_1');
var selectedOptions = rightBucket.options;
var selectedIDs = [];
for(var i = 0; i < selectedOptions.length; i++){
//Check for the item to add here based on sys_id
selectedIDs.push(i);
//var value = selectedOptions[i].value;
//rightBucket.remove(value);
// var lefBucket = gel(listCollectorName + '_select_0');
//leftBucket.add(value);
}
moveSelectedOptions(selectedIDs,rightBucket,leftBucket,'--None--');
sortSelect(leftBucket);
var leftOptions = leftBucket.options;
for(var j = 0; j<leftOptions.length; j++){
var value = leftOptions[j].innerHTML;
if(value == '--None--'){
leftBucket.remove(j);
alert(" ** changed in CLASSIC view ***");
}
}
}
Solved! Go to Solution.
- Labels:
-
Service Catalog

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2018 09:50 AM
Change type to all and use below script to combine it.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
try{
var collectorName = 'add_user_to_group'; //Name of your list collector.
var myListCollector = g_list.get(collectorName);
var selectedOptions = g_form.getValue(collectorName).split(',');
if((selectedOptions != "") && (selectedOptions.length > 0)){
//Remove items
var index = 0;
for (var i = 1, leng = selectedOptions.length+1; i < leng; i++){
myListCollector.removeItem(selectedOptions[selectedOptions.length-i]);
index++;
alert(" ** changed in portal ***");
}
}
}
catch(err){
//Type appropriate comment here, and begin script below
var listCollectorName = 'add_user_to_group'; //Name of your list collector.
var leftBucket = gel(listCollectorName + '_select_0');
var rightBucket = gel(listCollectorName + '_select_1');
var selectedOptions = rightBucket.options;
var selectedIDs = [];
for(var i = 0; i < selectedOptions.length; i++){
//Check for the item to add here based on sys_id
selectedIDs.push(i);
//var value = selectedOptions[i].value;
//rightBucket.remove(value);
// var lefBucket = gel(listCollectorName + '_select_0');
//leftBucket.add(value);
}
moveSelectedOptions(selectedIDs,rightBucket,leftBucket,'--None--');
sortSelect(leftBucket);
var leftOptions = leftBucket.options;
for(var j = 0; j<leftOptions.length; j++){
var value = leftOptions[j].innerHTML;
if(value == '--None--'){
leftBucket.remove(j);
alert(" ** changed in CLASSIC view ***");
}
}
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2018 09:42 AM
add myListCollector.reset(); where you want on code so it will clear the option.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2018 09:50 AM
Change type to all and use below script to combine it.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
try{
var collectorName = 'add_user_to_group'; //Name of your list collector.
var myListCollector = g_list.get(collectorName);
var selectedOptions = g_form.getValue(collectorName).split(',');
if((selectedOptions != "") && (selectedOptions.length > 0)){
//Remove items
var index = 0;
for (var i = 1, leng = selectedOptions.length+1; i < leng; i++){
myListCollector.removeItem(selectedOptions[selectedOptions.length-i]);
index++;
alert(" ** changed in portal ***");
}
}
}
catch(err){
//Type appropriate comment here, and begin script below
var listCollectorName = 'add_user_to_group'; //Name of your list collector.
var leftBucket = gel(listCollectorName + '_select_0');
var rightBucket = gel(listCollectorName + '_select_1');
var selectedOptions = rightBucket.options;
var selectedIDs = [];
for(var i = 0; i < selectedOptions.length; i++){
//Check for the item to add here based on sys_id
selectedIDs.push(i);
//var value = selectedOptions[i].value;
//rightBucket.remove(value);
// var lefBucket = gel(listCollectorName + '_select_0');
//leftBucket.add(value);
}
moveSelectedOptions(selectedIDs,rightBucket,leftBucket,'--None--');
sortSelect(leftBucket);
var leftOptions = leftBucket.options;
for(var j = 0; j<leftOptions.length; j++){
var value = leftOptions[j].innerHTML;
if(value == '--None--'){
leftBucket.remove(j);
alert(" ** changed in CLASSIC view ***");
}
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-26-2018 09:04 AM
Hello Mike, this worked fine in my initial testing, and many thanks for the help. If I spot any issues, I'll post them back here, but for now marking your reply as correct. Cheers, Mark S.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-18-2019 10:04 AM