I think the short answer to your request should be "No."
Your code doesn't even make any sense.
Every time there is an onkeyup, you update the values in v1 through v4. And you store the parsed value back in the form element.
And then you do that *ALL OVER AGAIN* when you call calculate( ).
The code is at least 3 times more complicated and larger than it needs to be.
It truly needs to be just rewritten from the ground up. Honest.
An optimist sees the glass as half full.
A pessimist sees the glass as half empty.
A realist drinks it no matter how much there is.