Hola:
Con la cadena vacía en el action si que se hace submit, pero a la misma página...
Puedes usar el mismo evento submit del form para cancelar el envío si faltan campos:
<form onsubmit="return (campo1.value != '' && campo2.value != '')"...
Y tu función catalogo() podrías resumirla un poco, pasándole como parámetro el propio control o el formulario (this o this.form)... se simplificaría así:
function catalogo(f) {// usando this como parámetro
location.href='descargaMateriales.asp?catalogo=' + f.value;
}
Saludos