Chosen ( although Im new to it), after inspecting the code, creates it's own markup for the select and sets the original as hidden, this is why setting the attributes on the select have no effect.
There is no clean way to do this ( AFAIK ) , other than rebuilding the .chosen()
each time.
Have a look at this rough demo - http://jsfiddle.net/AxG7G/
The key part in the code is that for each change, we use a function to rebuild the original select and redraw the .chosen()
Some additional Markup
<div id="selectcontainer">
<select id="my-select">
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
</select>
</div>
<input type="checkbox" id="my-checkbox"/>Multiple Selection
Then JS with the remake function
var $select = $('#my-select'), $selectContainer=$('#selectcontainer'),
$checkbox=$( "#my-checkbox" );
/* start the default .chosen() presentation */
$select.chosen();
function reDrawSelect(multiple) {
/* get the current select options and attributes */
var _selectHTML = $selectContainer.find('#my-select').html();
/* clear it */
$selectContainer.html("");
/* redraw it */
$select = $('<select id="my-select">'+_selectHTML+'</select>');
/* set multiple if */
if(multiple) { $select.attr('multiple','true'); }
$selectContainer.append($select);
/* re make .chosen() */
$select.chosen();
}
$checkbox.change(function() { reDrawSelect($checkbox.is(':checked')); });
Update: This may only solve half the problem ( what happens when there are multiple options selected, but then switch back to single for example ... )
Edits: fixing some problems/syntax from first example