Indeed this long rant by OP misses the critical info.
A button of default type will do weird things, IIRC it will skip the JS handler onCick, for instance.
A button of default type will do weird things, IIRC it will skip the JS handler onCick, for instance.
If you aren't expecting this (and don't know how to discover it e.g. by examining browser dev tools, server logs, etc.) then you'll assume the button is broken and... probably try something else.
Even if you do discover it, you may try something that won't quite have the same reliability - at one point it was common to see folks putting preventDefault() or return false in their click handlers to squelch the (correct) behavior, rather than changing the type of button.