Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/11/2005, 08:42
Avatar de vitxo
vitxo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 21 años, 5 meses
Puntos: 0
HTMLSelectElement vs. Select? (Programando Orientado a Objetos)

Hola a todos,
tengo tres selects para seleccionar paises, provincias de esos paises y ciudades de esas provincias.
He añadido tres métodos a la clase HTMLSelectElement para poder implementar la funcionalidad y así, cuando el usuario seleccione un país, se carguen en el segundo select sus provincias y de forma análoga con el tercer select y las ciudades:

Código PHP:

HTMLSelectElement
.prototype.addObserver = function(observer){
  
this.observer observer;
};

HTMLSelectElement.prototype.stateChanged = function() {
  
this.observer.update(this);
};


HTMLSelectElement.prototype.update = function(subject) {
  
//Este método es abstracto, es decir, lo redefiniré dependiendo
  //del Select al que pertenezca para que modifique los contenidos
  //del select que le observa (el
  
alert("Observer ("+this.id+") está mirando "+subject.id);
}; 
Igual a alguno esto le es familiar, ya que he implementado una forma simplificada del patrón observer para que "cada objeto select observe a otro (un sujeto) y pueda percatarse cuando el sujeto cambia de estado (por ejemplo, seleccionar un país)."

De tal forma, que con este código Javascript y suponiendo que tengo dos Selects con los IDs "paises" y "provincias", para que las provincias se actualicen como yo especifique (en su método update) sólo tengo que escribir este código -una vez modificada la clase HTMLSelectElement claro-: (He simplificado el código con las líneas menos relevantes y comentando su funcionamiento)

Código PHP:
    var oPaises document.getElementById("paises");
    var 
oProvincias document.getElementById("provincias");

   
oPaises.addObserver(oProvincias);

   
oPaises.onchange = function() {
      
//aunque esto tb podría llamarlo desde el atributo 
      // "onchange=" en la etiqueta <select>
      
this.stateChanged()
   };
  
//reescribo el HTMLSelectElement.update(subject)
  //de las provincias
  
oProvincias.update = function(subject) {
    
//aquí podría sacar el país seleccionado de la instancia "subject"
    //y rellenar las provincias correspondiente en este objeto (en oProvincias)
  
}; 
Mi problema es el siguiente: esde Mozilla Firefox puedo modificar la implementación de la clase HTMLSelectElement y los Selects se actualizan a las mil maravillas, pero IExplorer 6 se "queja" porque "HTMLSelectElement" no está definido. He probado con la clase Select definida en http://www.w3schools.com/, pero me ocurre lo mismo. Es decir, que desde IExplorer no le puedo añadir los métodos que quiera.

¿A alguien le ha ocurrido lo mismo creando sus propios objetos en Javascript?

Última edición por vitxo; 10/11/2005 a las 10:08