Foros del Web » Programando para Internet » Javascript »

HTMLSelectElement vs. Select? (Programando Orientado a Objetos)

Estas en el tema de HTMLSelectElement vs. Select? (Programando Orientado a Objetos) en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/11/2005, 08:42
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 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
  #2 (permalink)  
Antiguo 10/11/2005, 09:32
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
yo programo con objetos pero aca no entiendo lo que es "HTMLSelectElement" ni el sentido de usar objetos para actualizar 1 select dependiento de otro
__________________
Internet Explorer SuckS
Download FireFox
  #3 (permalink)  
Antiguo 10/11/2005, 09:53
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Pues porque document.getElementById("paises") devuelve un objeto de la clase HTMLSelectElement que representa el Select correspondiente en el documento. Lo que he hecho es que el Select de las provincias "observe" al de los paises para que se actualice cuando seleccione un país en concreto. La lógica encargada de ver qué país se ha seleccionado y rellenar en consecuencia el select de las noticias se encuentra en el método update() del objdgo oProvincias (que es una instancia de HTMLSelectElement).

Más info del patrón de diseño Observer aquí: http://es.wikipedia.org/wiki/Observe...de_dise%C3%B1o)

Es una aproximación orientada a objetos nada más y nada menos al clásico problema de actualizar un Select en función de la opción seleccionada en otro.

Última edición por vitxo; 10/11/2005 a las 10:10
  #4 (permalink)  
Antiguo 10/11/2005, 10:26
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
claro pero si en ie haces un alert del objeto select devuelve "object" y no HTMLSelectElement como en gecko
__________________
Internet Explorer SuckS
Download FireFox
  #5 (permalink)  
Antiguo 10/11/2005, 12:42
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Así es, ¿entonces de qué clase es instancia un Select en IE?
  #6 (permalink)  
Antiguo 10/11/2005, 13:47
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
Lástima que acabo de encontrar un par de posts donde dicen que IExplorer no soporta añadir prototipos a interfaces DOM. :(


http://cf-bill.blogspot.com/2005/05/...tinued-my.html
http://www.webxpertz.net/forums/showthread.php?t=25374
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:13.