Efectivamente, si un elemento indicado en el código no existe en el documento, se produce un error. Ahora, lo que puedes hacer es: tomar el camino más largo, el cual consiste en realizar comprobaciones sucesivas mediante el uso de condiciones (N comprobaciones por cada N elementos), o tomar el camino más corto: utilizar una clase la cual se asignaría al bloque que se desea visualizar y, cuando se elija otra opción, se comprueba la existencia de algún bloque con dicha clase, se le retira la clase, se oculta a dicho bloque y, al bloque que se desea visualizar, se le asigna la clase de visualización y se lo hace visible.
Código Javascript
:
Ver originaldocument.addEventListener("DOMContentLoaded", function(){
var select = document.querySelector("#id_del_select"), //El <select>
valor, antiguo, nuevo;
//Cuando se elija un valor diferente en el <select>
select.addEventListener("change", function(){
//Si existe el valor elegido, se trabaja con él, caso contrario, con el valor booleano "false"
valor = this.value ? this.value : false;
//Tomamos al elemento visible, si lo hay
antiguo = document.querySelector(".la_clase");
//Tomamos al bloque que corresponda con el valor elegido si este existe o se establece un valor nulo
nuevo = valor ? document.querySelector("#" + valor) : null;
//Si existe un bloque visible
if (antiguo){
//Le retiramos la clase y automáticamente se ocultará
antiguo.className = "";
}
//Si el valor de la opción elegida existe
if (valor){
//Al nuevo se le añade la clase y automáticamente se hará visible
nuevo.className = "la_clase";
}
}, false);
});
Para este ejemplo estoy considerando que, inicialmente, todos los bloques están ocultos. Eso puedes hacerlo desde la hoja de estilos (CSS) estableciendo el par atributo-valor
display: none
para todos los bloques. La clase es fundamental ya que, mediante CSS, hará visible al bloque elegido.
DEMO