Este es el codigo:
lista_dinamica.js
Código :
// Constructor function listaDinamica( frm, name, data ) { this.frm = frm; this.name = name; this.data = data; this.size = 1; this.multiple = ""; this.doc = document; this.onchange = ""; this.objeto = null; } // Push function pushLista( valor ) { if ( valor == null ) return null; if( this.search( valor ) < 0 ) this.data[this.data.length] = valor; } listaDinamica.prototype.push = pushLista; // Pop function popLista( valor ) { if ( valor == null ) valor = this.value(); var i = this.search( valor ); if ( i == -1 ) return null; if( i > -1 ) { for( var j = i+1; j < this.data.length; j++ ) this.data[j-1] = this.data[j]; this.data.length--; return valor; } return null; } listaDinamica.prototype.pop = popLista; // Length function lengthLista() { return this.data.length; } listaDinamica.prototype.length = lengthLista; // Search function searchLista( valor ) { for( var i = 0; i < this.data.length; i++ ) if( this.data[i] == valor ) return i; return -1; } listaDinamica.prototype.search = searchLista; // Sort function sortLista() { if( this.data.length == 0 ) return; for( var i = 0; i < this.data.length; i++ ) { var min = i; for( var j=i+1; j < this.data.length; j++ ) if( this.data < this.data ) min = j; this.swap( i, min ); } } listaDinamica.prototype.sort = sortLista; // Swap function swapLista( i, j ) { if( i == j ) return; var aux = this.data[i]; this.data[i] = this.data[j]; this.data[j] = aux; } listaDinamica.prototype.swap = swapLista; // toString function toStringLista( sep ) { if( sep == null ) sep = "_"; if( this.data.length <= 0 ) return ""; var res = this.data[0]; for( var i=1; i < this.data.length; i++ ) res += sep+this.data[i]; return res; } listaDinamica.prototype.toString = toStringLista; // Write function writeLista() { var buffer = ''; buffer += '<!--INICIO LISTA DINAMICA "'+this.name+'"-->'; var onchange = this.onchange ? 'onchange="'+this.onchange+'"' : ''; buffer += '<select name="'+this.name+'" '+this.multiple+' size="'+this.size+'" '+onchange+'>'; buffer += '<option>--------------------------------------------------</option>'; for( var i = 0; i < this.data.length; i++ ) buffer += '<option>'+this.data[i]+'</option>'; buffer += '</select>'; buffer += '<!--FIN LISTA DINAMICA "'+this.name+'"-->'; this.doc.writeln( buffer ); this.objeto = this.frm.elements[this.name]; this.objeto.options[0] = null; } listaDinamica.prototype.write = writeLista; // Refresh function refreshLista() { while( this.objeto.options.length > 0 ) this.objeto.options[0] = null; for( var i = 0; i < this.data.length; i++ ) this.objeto.options[i] = new Option( this.data[i], this.data[i] ); } listaDinamica.prototype.refresh = refreshLista; // Clean function cleanLista() { while( this.data.length > 0 ) { this.objeto.options[0] = null; this.data.length--; } } listaDinamica.prototype.clean = cleanLista; // Index function indexLista() { return this.objeto.options.selectedIndex; } listaDinamica.prototype.index = indexLista; // Value function valueLista() { if( this.index() > -1 ) return this.data[this.index()]; return null; } listaDinamica.prototype.value = valueLista;
formulario.html
Código :
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>DATOS</title> </head> <body> <p> </p> <form name="myform"> <script src="lista_dinamica.js"></script> <script language="javascript"><!-- //Lista: Estado var lista = new listaDinamica( document.myform, "lista", new Array( "Caracas", "Miranda", "Merida" ) ); lista.onchange = "actualizar()"; lista.write(); // Lista2 : Municipio var lista2 = new listaDinamica( document.myform, "lista2", new Array( "Libertador") ); lista2.write(); //Lista3 : Parroquia var lista3 = new listaDinamica( document.myform, "lista3", new Array( "Altagracia", "Libertador", "Antimano") ); //lista3.onchange = "actualizar()"; lista3.write(); function actualizar() { if( lista.value() == "Caracas" ) { lista2.data = new Array( "Libertador" ); if( lista2.value() == "Libertador" ) { lista3.data = new Array("Altagracia", "Libertador", "Antimano"); } } else if( lista.value() == "Miranda" ) { lista2.data = new Array( "Acevedo", "Andrés Bello", "Baruta", "Brión", "Buroz", "Carrizal", "Chacao", "Cristóbal Rojas", "El Hatillo", "Guaicaipuro", "Independencia", "Lander", "Los Salias", "Páez", "Paz Castillo", "Pedro Gual", "Plaza", "Simón Bolívar", "Sucre", "Urdaneta", "Zamora"); if ( lista2.value == "Acevedo") { lista3.data = new Array ( "Acevedo" ); } else if( lista2.value() == "Cristóbal Rojas" ) { lista3.data = new Array( "Charallave", "Las Brisas" ); } else if( lista2.value() == "Independencia" ) { lista3.data = new Array( "Ocumare", "Santa Barbara" ); } } else if( lista.value() == "Merida" ) { lista2.data = new Array( "Alberto Adriani", "Andrés Bello", "Antonio Pinto Salinas", "Aricagua", "Arzobispo Chacón", "Campo Elías", "Caracciolo Parra y Olmedo", "Cardenal Quintero", "Guaraque", "Julio César Salas", "Justo Briceño", "Libertador", "Miranda", "Obispo Ramos de Lora", "Padre Noguera", "Pueblo Llano", "Rangel", "Rivas Dávila", "Santos Marquina", "Sucre", "Tovar", "Tulio Febres Cordero", "Zea"); if( lista2.value == "Alberto Adriani") { lista3.data = new Array("Alberto Adriani"); } else if( lista2.value == "Tovar") { lista3.data = new Array("Merida"); } } lista2.refresh(); lista3.refresh(); } //--></script> </form> </body> </html>
Si alguien puede explicar que estoy haciendo mal.
Muchas gracias.