The component with the valueChangeListener should have immediate="true" on it. At the end of the value change listener method, you'll need to force the JSF lifecycle to render response phase, or else the old values from the component will overwrite the new ones you just put in. Here's the command to skip to renderResponse phase:
FacesContext.getCurrentInstance().renderResponse();
The reason you need to do this is because the JSF lifecycle will continue to run normally unless you interrupt it. Which means that the component you change all the values on at one stage in the lifecycle, get reset at a different stage.
A simplified example:
1) change occurs and JavaScript submits the form.
2) value change listener runs during the ApplyRequestValues (if immediate="true" on the component).
3) Validation Phase runs, checking the old values and then
4) Update models updates with the old values, and the new ones are essentially ignored.
Hope this helps,
CowKing
CowKing