<input type="submit" value="INVIA" onclick="this.value='loading...';" />

Nota pero` che se fai partire il form con altri sistemi (ad esempio il tasto return), il tasto non cambia.

Di solito il loading si controlla lato server, inviando un primo <div> all'inizio dell'elaborazione e nascondendolo quando il resto della pagina e` pronto.