You did not show anything about the onClick, but I assume if you want to capture onChange you ought not be implementing onClick? Even though theoretically they do not interfere if you do them properly, it may be a source of confusion unless you know you are doing it the right way.
Do you get any expected values for $arg? Seems like from your post you don't but I am not totally clear about that. If so, you should first concentrate on getting $arg to carry the value you expect first.
How do you get the value of $arg? I assume you used CGI->param()?
By the way, have you tested the changeDispatch() Javascript function separately using a static HTML test page before? If you look at
DOM:document.location - MDC there is a note saying the use of document.location.href as a write property is not portable. In fact I have only used
window.location = url;
in the past. I have not seen anyone making a redirect like you did (using document.location.href) before. Are you sure that function is working properly?
If everything fails, I suggest you to:
(1) Check the Javascript debugger for any relevant error messages
(2) Re-post with the HTML generated by Perl. Because your issue is not related to Perl but HTML and Javascript, the abstraction by Perl CGI may mask investigation.