Skip to main content

Question Type: multi_select_question

When one choice isn't enough

Updated over 3 weeks ago

When and Why to Use

Use this when the respondent can select more than one option. Ideal for:

• Attitudes, experiences, or features that apply in parallel

• “Select all that apply” questions

• Showing both fixed and exclusive choices (e.g. “None of the above”)

Supports image-based choices, randomization, “Other (specify)”, and recodes.

Portrait Experience

• Options shown as checkboxes or tap-to-select tiles.

• If max_options is set, selection becomes disabled once the limit is reached.

• Exclusive options deselect others when tapped.

• Specify input appears inline below the selected “Other” option.

Landscape Experience

• Same logic as portrait, but more layout flexibility.

• Wider layout for media items, and better keyboard/remote navigation support.

Configuration Options

Option

Type

Required

Default

Description

question

string

yes

-

The prompt shown to the user

options

`List[str

MediaItem]`

yes

-

max_options

int

no

all

Limit how many items can be selected

image

MediaItem

no

-

Image shown above the question

randomize

bool

no

False

Shuffle options (except fixed ones)

fixed_options

List[str]

no

-

Options that remain static during randomization

exclusive_options

List[str]

no

-

Options that deselect all others when chosen

disabled_options

List[str]

no

-

Options to grey out/disable

specify_option

str

no

-

Adds an “Other” option requiring input

specify_text

str

no

“Please specify”

Prompt shown with specify_option

default

List[str]

no

random choices

Test data default selections

recodes

Dict[str, str]

no

-

Maps response(s) to grouped value(s)

custom_validator

`Callable[[List[str]], str

None]`

no

-

skip_empty

bool

no

False

If True, skips question if no valid options

image_label_field

str

no

-

Field used to label media options

show_image_label

bool

no

True

Whether to show image captions

image_size

Tuple[int, int]

no

-

Display size for images in options

**topics

dict

no

-

Replaces tokens in text and supports grouped reporting

Example Code

s.multi_select_question( "What did you enjoy about the experience?", options=["The food", "The service", "The atmosphere", "The price"], fixed_options=["Other"], exclusive_options=["Other"], specify_option="Other", recodes={ "The food": "food", "The service": "service", "The atmosphere": "atmosphere", "The price": "price", "Other": "other" } )

With max options and validation:

s.multi_select_question( "Select up to two brands you most associate with luxury", options=["Lexus", "BMW", "Audi", "Mercedes"], max_options=2, custom_validator=lambda x: "You must choose at least one brand" if not x else None )

Notes

• exclusive_options override other selections and enforce mutual exclusivity

• Use max_options to encourage prioritization

• recodes let you bucket answers for analysis

• specify_option is helpful for capturing outliers or edge cases

Did this answer your question?