Hola:
Si el action es inexistente o vacío, el submit se hace hacia la misma página, y por eso da la senseción de refresco, pero es en realidad la "recepción" del formulario... la verdad es que no sé cuál es el destino que quieres para ese formulario...
Para enviar un formulario asociado al eventp change del select de un formulario la instruccuón sería: onchange="this.form.submit()", pero es un envío forzado así que las validaciones -y demás- normales deben rebuscarse un poco...
Para que ejecute la función vote() antes del envío simplemente se hace la llamada antes del submit... y si se quiere condicionar ese submit (validación/comprobación...) debe hacerse también con el evento change...
onchange="vote(); if (valida(this.form) this.form.submit());"
Si no te sirve, intenta detallar mejor tu problema.
Saludos