Start by adding a large number of other specify response options to your select question. Add as many as you believe a respondent could reasonably want to use. Then add this to your select question's footer:
<script>
$(document).ready(function(){
var firstHiddenOther = 999;
var list = $('input[name="hid_list_[% QuestionName() %]"]').val().split(',').map(Number);
for (var i = 0; i < list.length; i++) {
var item = list[i];
if ($('#[% QuestionName() %]_' + item + '_other').length && !SSI_GetValue('[% QuestionName() %]_' + item)) {
$('#[% QuestionName() %]_' + item).closest('.response_row').hide();
firstHiddenOther = item < firstHiddenOther ? item : firstHiddenOther;
}
}
var newResponseRow = $('#[% QuestionName() %]_' + firstHiddenOther).closest('.response_row');
$(newResponseRow).parent().append($(newResponseRow));
$(newResponseRow).show();
})
function SSI_CustomGraphicalCheckbox(graphical, input, bln) {
if ($(input).closest('.response_row').find('.text_input').length) {
var list = $('input[name="hid_list_[% QuestionName() %]"]').val().split(',').map(Number);
if (bln) {
var showNewOther = true;
var firstHiddenOther = 999;
for (var i = 0; i < list.length; i++) {
var item = list[i];
var ithResponseRow = $('#[% QuestionName() %]_' + item).closest('.response_row');
var ithOther = $('#[% QuestionName() %]_' + item + '_other').length;
var ithChecked = SSI_GetValue('[% QuestionName() %]_' + item);
var ithHidden = $(ithResponseRow).is(':hidden');
if (ithOther && !ithChecked) {
showNewOther = !ithHidden ? false : showNewOther;
firstHiddenOther = (item < firstHiddenOther) ? item : firstHiddenOther;
}
}
if (showNewOther) {
var newResponseRow = $('#[% QuestionName() %]_' + firstHiddenOther).closest('.response_row');
$(newResponseRow).parent().append($(newResponseRow));
$(newResponseRow).show();
}
}
else {
var keepThisResponseRow = true;
var thisResponseRow = $(input).closest('.response_row');
for (var i = 0; i < list.length; i++) {
var item = list[i];
if ('[% QuestionName() %]_' + item != input.name) {
var ithResponseRow = $('#[% QuestionName() %]_' + item).closest('.response_row');
var ithOther = $('#[% QuestionName() %]_' + item + '_other').length;
var ithChecked = SSI_GetValue('[% QuestionName() %]_' + item);
var ithHidden = $(ithResponseRow).is(':hidden');
if (ithOther && !ithChecked && !ithHidden) {
keepThisResponseRow = false;
break;
}
}
}
if (keepThisResponseRow) {
$(thisResponseRow).parent().append($(thisResponseRow));
}
else {
$(thisResponseRow).hide();
}
}
}
}
</script>