どもです。
selectにreadonly属性をつけても、プルダウンの選択・変更はできてしまいます。
変更できてしまうのではreadonlyじゃないじゃないか。
$("select[readonly]").each(function(){
$(this).find('option:not(:selected)').prop('disabled', true);
});
オプションをdisabledにすることで、選択不可にできます。
なお、初期状態のselectは一番上の項目がselected扱いなので、無選択状態を考慮した処理は不要。
ちなみにselect[disabled]だとプルダウンを開くこともできない。