Hola diego, te cuento que hace unos mese se me presento el mismo problema. Y mas alla de que ya encontraste una posible solucion, te recomiendo otra, la que use yo.
Veamos si mi caso es similar al tuyo. Tenia 1 checkbox y un input para subir archivos. Cuando alguien tildaba el checkbox se abria un layer con opciones mas avanzadas, y ejecutaba una funcion. El tema es que si hacian click de nuevo tenia que llamar de nuevo a la misma funcion y cerrar el layer. Para esto necesitaba saber 2 cosas: Si el checkbox estaba tildado o no. Lo que hice fue declarar 1 variable global y asignarle el valor "falso". Y si hacian click en el checkbox el valor cambiaba, de falso a verdadero y de verdadero a falso. Entonces en la funcion comprobaba con un if/then si el checkbox estaba activado o no.
Te escribo un ejemplo:
Código PHP:
<script>
var cBox = false;
</script>
<form>
<input type="checkbox" name="diego" value="0"
onClick="cBox=cBox?0:1; alert(cBox);">
</form>
Ejecutalo asi como esta que funciona, y despues borra el alert(cBox);
Te explico muy por arriba lo que hice asi de paso te queda algo productivo de este ejemplo pedorro que te di :)
Código PHP:
onClick="cBox=cBox?0:1;"
Lo que hago ahi es lo siguiente, compuebo si la variable cBox es verdadera o falsa. Es lo mismo que escribir:
Código PHP:
onClick="cBox=if(cBox==true){cBox=false;}else{cBox=true;}"
...pero como veras, mas resumido.
saludos capo