Working with multiple select elements

I have a select list with a bunch of option elements in it. The select element has multiple set to True, so the user can select more than one element. What I’m trying to do is to have an event fire when an option in that select list is clicked on. I’m finding it not to be that straightforward. Here are the scenarios of how someone can interact:

Someone clicks on an option
This one is easy. I can add either an onInput event to the select element or an onClick event to the option. My update function will get called and everything works great.

Someone control/command clicks on multiple options
This also is easy. It works the same as the previous scenario.

Someone clicks on an option, then shift-clicks on another option to select a range of options
This is the one that is tripping me up. I can get the first and the second click, but I’m not getting any sort of event for the selection of the intermediate options.

It’s a pretty common case, so I’m hoping there’s something out there to handle this cleanly. Right now, I’m thinking there are three potential solutions for this. First, I can detect if someone is doing a shift-click by listening for the shift button being depressed. If they do a shift click, then I’d need to figure out which options are in between the last option that was clicked and the option that was shift-clicked and mark them as selected. Second, I can handle the onInput event of the select element and call out to a port to get a comprehensive list of all of the selected options. Three, I can leverage some sort of event or facility of Elm to get at this information. I’m hoping three is the answer.

Does anyone have any experience with this sort of thing? Any ideas on what the best approach would be?


Take a look at elm-input-extra. I think the multiselect does exactly what you want.

1 Like

Thanks! That will do the trick.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.