Un formulario al que se puede acceder rápidamente
Este es un script para ayudar a quienes les gusta los formularios. ¿Quisiera que se pueda acceder a una larga lista de datos
mediante una lista que desfila? En lugar de dejar que sus visitantes se pierdan en listas interminables, guíelos mediante
un pequeño campo de texto. Colóquelo inmediatamente encima de la lista. Cuando un visitante introduce las primeras letras
de una palabra (o título de una película, o canción, etc.), se reducirá la lista a estos elementos y sólo aparecerán los que
correspondan a su solicitud. Una manera formidable de organizar listas demasiado largas.
¿Quiere ver un ejemplo?
Para definir este tipo de formulario, coloque primero este largo script en el encabezamiento de su página.
<script LANGUAGE="JavaScript">
function SelObj(formname,selname,textname,str) {
this.formname = formname;
this.selname = selname;
this.textname = textname;
this.select_str = str || '';
this.selectArr = new Array();
this.initialize = initialize;
this.bldInitial = bldInitial;
this.bldUpdate = bldUpdate;
}
function initialize() {
if (this.select_str =='') {
for(var i=0;i<document.forms[this.formname][this.selname].options.length;i++) {
this.selectArr[i] = document.forms[this.formname][this.selname].options[i];
this.select_str += document.forms[this.formname][this.selname].options[i].value+":"+
document.forms[this.formname][this.selname].options[i].text+",";
}
}
else {
var tempArr = this.select_str.split(',');
for(var i=0;i<tempArr.length;i++) {
var prop = tempArr[i].split(':');
this.selectArr[i] = new Option(prop[1],prop[0]);
}
}
return;
}
function bldInitial() {
this.initialize();
for(var i=0;i<this.selectArr.length;i++)
document.forms[this.formname][this.selname].options[i] = this.selectArr[i];
document.forms[this.formname][this.selname].options.length = this.selectArr.length;
return;
}
function bldUpdate() {
var str = document.forms[this.formname][this.textname].value.replace('^\\s*','');
if(str == '') {this.bldInitial();return;}
this.initialize();
var j = 0;
pattern1 = new RegExp("^"+str,"i");
for(var i=0;i<this.selectArr.length;i++)
if(pattern1.test(this.selectArr[i].text))
document.forms[this.formname][this.selname].options[j++] = this.selectArr[i];
document.forms[this.formname][this.selname].options.length = j;
if(j==1){
document.forms[this.formname][this.selname].options[0].selected = true;
}
}
function setUp() {
obj1 = new SelObj('menuform','itemlist','entry');
obj1.bldInitial();
}
</script>
Después, defina su formulario de la siguiente manera. No olvide personalizar su lista:
<form name="menuform" onSubmit="javascript:window.location = document.menuform.itemlist.options[document.menuform.itemlist.selectedIndex].value;return
false;">
<input type="text" name="entry" size="30" onKeyUp="javascript:obj1.bldUpdate();">
<br>
<select name="itemlist" size=5>
<option value="my_page1.htm">First element
<option value="my_page2.htm">Second element
<option value="my_page3.htm">Third element
</select>
</form>
Y tampoco olvide iniciar el script durante la carga de su página:
<body OnLoad="javascript:setUp()">