Sometimes you want to modify the options for a dropdown box by removing some existing options, however you want to be able to keep these old values for reporting or whatever reasons.
Below is a way to do it by using jQuery and SharepointPlus. It will hide the “Specify your own value” stuff, and add the old value (if any) into the dropdown selection.
For example if you have a Choice field with options “A”, “B”, “C”. Your item ID #1 has value “B”.
After a while you decide to delete “B” and add “D”, but you want to be able to find items with the “B” value.
So you choose “Choice with Fill-In” and apply the below code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // For flexibility reasons we create them as a Choice with Fill-In option, // however we hide the free text field and we show only the dropdown // in case of the fill-in has a value, then we add it into the list of options $SP().formfields([ "My Fist Dropdown" , "Another One" ]).each( function () { var $e = this .elem(); // hide all except the dropdown //$e.not('select').hide().filter(':radio:last').closest('tr').hide(); // SP2010 $e.eq(0).closest( 'table' ).find( 'tr:gt(0)' ).hide(); // SP2013 // if we have a value into the fill-in box, then: // - add it into the options // - when another value is selected we check the first checkbox var fillValue = $e.last().val(); if (fillValue) { $e.filter( 'select' ).append( '<option data-fillin="true">' +fillValue+ '</option>' ).each( function () { var $ this =$( this ); $ this .find( 'option:last' ).prop( "selected" , true ); $ this .removeAttr( "onclick" ).on( 'change' , function (event) { var $opt = $( this ).find( ':selected' ); if ($opt.data( "fillin" )) { $e.filter( ':radio:last' ).prop( "checked" , true ); } else { $e.filter( ':radio:first' ).prop( "checked" , true ); } }); }); } }) |
So now, if you create a new item you’ll see a dropdown with “A”, “C”, and “D” only.
But if you edit your item #1, you’ll have a dropdown with “A”, “C”, “D” and “B”.