Ben,
do you return false when the validation fails? That should keep the user from switching to something else in 3.1.x