I'm trying to create a Text field in a form that will validate and autofill, but with no option to add invalid text

I’m trying to find a way to validate data entered into a Text field in a way that is as keyboard-friendly as possible. Even without a keyboard, I have some fields where it will be much faster to enter the first few characters of a field than to scroll through a list of choices.

Once I have typed enough characters to uniquely identify one of the options, I’d like to be able to have the app Autocomplete/Autofill the field with the matched option.

I have read-only table called Who, with a list of names in it.

As an example, if the Who table contains the names …

  • Julie
  • Justin
  • Fred
  • Peter
  • Philip

… I’d like to display an empty text box to the user into which they can type something rather than a box with a drop-down arrow in it. Once they start to type, I’d like the user to be shown a list of matching entries, and once they’ve typed enough to only match one entry, that one should be automatically selected (or at least be automatically selected as soon as the user tabs to the next field or moves out of the field in any way).

So given the above example, if I’m adding new entries to a different table where I want to make sure that all names in the table come from a valid list, when I type “J” or “Ju” into the text box, it should show Julie and Justin as valid options. As soon as I type “s” or “l”, I then have only one option left (Justin or Julie, respectively), and that option should then be autofilled into the text box.

As far as I can work out, Suggest if in the Auto Compute section for a text field requires me to click into the field before it lets me type anything into the field - a step I’m trying to avoid. In addition, using the tab key doesn’t visibly select the radio button option that I’ve tabbed to, so I can’t see which option I may have selected. Finally, Suggest_If gives me the option to type something that isn’t in the existing list, and has

  • Use “my text”
    as the first option - which I don’t want to allow, but I can’t see any way to suppress it whilst still maintaining the primary input method to be typing. (Clicking into the field to see and select from a valid list of options is fine if that’s what the user wants to do, but is frustratingly slow for anyone who prefers a keyboard to a mouse or touchscreen.)

If I use Valid if in the Data Validity, the ability to have a text (search) box at all disappears - I just get a list of radio buttons.

I’ve seen questions about Autocomplete, but those that I’ve found are questions from people who aren’t bothered how the options are presented to the user, and also want the user to be able to enter a new value, which is the opposite of what I want.

Is there a way to achieve this please?

For bonus points, even if I don’t type enough characters for a unique match, can I order the data in the sheet used for the validation according to preference, and have appsheet autocomplete the first match, even if I haven’t typed enough characters for a unique match? e.g. in my list of names above, if I type J, Julie is before Justin in my list, so it should use Julie as the text for that field.

Thanks
Julie

Enum columns in Appsheet don’t work like that.

Something that may get you what you want would be to include a second column for manual text entry. As a user enters text into this column, an Initial Value expression for the original Enum column could use the entered text to choose the item once enough letters are entered.

There isn’t really a functional difference between using Valid_If vs Suggested Values, when you’re entering a List-returning expressions into either. But perhaps you have missed these options?

You can utilize the ORDERBY() expression, but only if the Enum is base type Ref. That would actually make the Initial Value that I mentioned above easier, as you could get rid of any logic checking for a single result, and instead simply use INDEX(... , 1 )

2 Likes

Auto-selection from a minimal match is not possible in AppSheet.

1 Like

Thank you - I had a feeling that was going to be the answer. I’ll live with it :wink:

1 Like