Hi Shiv,
So there are pros and cons, not just for Accessibility but also for useability.
The main pro is preventing a user from progressing while missing key data. I think the cons below far out weight the pros though…
If a button is disabled and it isn’t clear why, or what information the user needs to supply, this can cause frustration with the form/site/app, and that frustration could lose you customers, mean you are not compliant to regulations or worse.
Additionally, when a button is disabled it is often ‘greyed out’, which may mean it’s contrast ratio fails WCAG guidelines, specifically the success criterion within the 1.4 Distinguishable Guideline.
While it might be obvious to some users that the button is disabled, those with visual impairments may not be able to tell, and because it’s disabled it won’t respond to their clicks.
An alternative way to do this, is leave the button enabled but make it conditional on the mandatory fields so when the button is clicked, instead of it doing nothing, it flags the error for the related mandatory information and identifies the field that the data is required in clearly.
The other challenge with a disabled button, because it cannot be clicked, users cannot necessarily trigger errors that guide them into understanding what should have been entered.
I’ve seen systems that when the wrong data is entered, an error is created, but if the field is missed entirely, it is only when the user clicks ‘next’ that the error for the missing data appears. This is usually because the validation is server-side and not client-side. So it only checks once they have tried to progress.
If the button isn’t disabled but will not proceed without the relevant data the user will trigger the error and better understand what is missing.
Here’s an example of what I mean if you visit the Universal Credit Login Page at Gov.UK and click the Sign In Button, you will see two errors appear guiding the user to the fields and the data required.
I hope that helps explain why disabling a button is not the best option to ensure users have provided the correct information. If you have it enabled but conditional then they can trigger errors to complete the page.
J