Have you ever run into a situation where you have a button that should only continue when a bunch of inputs are filled in?
In many cases, when that button is saving something to the database and your inputs are marked as “This input should not be empty”, Bubble already handles everything for you. The button won’t proceed if something is missing, and when you click it, Bubble highlights the inputs that need attention. You don’t have to think about button clickability at all.
The problem usually starts when you’re not saving anything to the database.
This often happens in multi step flows, wizards, or screens where the button just moves the user to the next step. It also gets worse when you have several inputs with autobinding, or groups that become visible or hidden based on conditions. At that point, you end up creating long and painful conditionals like “when input A is empty and input B is empty and input C is empty…”, and you still need to worry about which inputs are currently visible.
This can get messy very quickly.
I recently found a small hack that makes this much simpler.
What I do is create a custom event. It can be completely empty, or it can have actions, that part doesn’t really matter. The key point is that this custom event is triggered by the button.
Inside the custom event, I add parameters and pass the values of the inputs into those parameters. I don’t save anything to the database. I don’t even need to use those values for anything else. I just make sure the parameters are filled with the input values.
By doing this, Bubble automatically treats those inputs as required for the action to run. If any required input is empty, the button won’t proceed. When the user clicks the button, Bubble also highlights the invalid inputs using the standard invalid style you already configured.
The result is that the button behaves just like a “save to database” button, even though you’re not saving anything at all.
This completely removes the need for giant conditional expressions on the button and makes flows with many inputs, autobinding, and conditional visibility much easier to manage.
Hopefully this helps someone clean up those scary button conditionals we all eventually find in apps we inherit or maintain.





