Newsgroup: it.comp.lang.javascript
Titolo: Combobox "intelligente"

Ciao a tutti,
ho un quesito da porvi.
In una form ho una <select> che contiene un numero notevole di opzioni: dato
che sono tante l'utente non ha voglia di cercare a mano quella che gli
interessa ma vorrebbe poter digitare la parte iniziale in modo che ci sia
una sorta di completamento automatico, un po' come succede nelle "vere"
combobox al di fuori dei browser.
Al momento pensavo di utilizzare una casella di testo a fianco della
combobox, per poi aggiornare quest'ultima ogni volta che l'utente digita
qualcosa nella casella. Avete qualche altra idea migliore?
ciao Anto

 ho un quesito da porvi.
[CUT]
Io mi ero messo a fare qualcosa del genere ma sinceramente non ricordo a
che punto ero.
Se vuoi:
http://www.criosoftware.it/bak/select.htm
va testato bene sia come funzionalità che come compatibilità (per esempio
usa setAttribute e mi sa che funziona solo con le ultimissime versioni di
Opera).
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 Opera).
ti ringrazio ma non e` esattamente quello che cercavo: ad esempio sarebbe
utile che la stringa digitata dall'utente non sia necessariamente
all'inizio delle opzioni ma magari anche nel mezzo. Mi sa che a meno di
contorsioni incredibili non si riesce a fare tanto meglio di una textbox
accanto alla combo...
ciao Anto


// WWW: 
http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download.
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// ===================================================================
// -------------------------------------------------------------------
// autoComplete (text_input, select_input, ["text"|"value"], [true|false])
//   Use this function when you have a SELECT box of values and a text
//   input box with a fill-in value. Often, onChange of the SELECT box
//   will fill in the selected value into the text input (working like
//   a Windows combo box). Using this function, typing into the text
//   box will auto-select the best match in the SELECT box and do
//   auto-complete in supported browsers.
//   Arguments:
//      field = text input field object
//      select = select list object containing valid values
//      property = either "text" or "value". This chooses which of the
//                 SELECT properties gets filled into the text box -
//                 the 'value' or 'text' of the selected option
//      forcematch = true or false. Set to 'true' to not allow any text
//                 in the text box that does not match an option. Only
//                 supported in IE (possible future Netscape).
// -------------------------------------------------------------------
function autoComplete (field, select, property, forcematch) {
	var found = false;
 
	//alert("select.options.length");
	for (var i = 0; i < select.options.length; i++) {
 
	if 
(select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) 
== 0) {
		found=true; break;
		}
	}
	if (found) { select.selectedIndex = i; }
	else { select.selectedIndex = -1; }
	if (field.createTextRange) {
		if (forcematch && !found) {
			field.value=field.value.substring(0,field.value.length-1);
			return;
			}
		var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
		if (cursorKeys.indexOf(event.keyCode+";") == -1) {
			var r1 = field.createTextRange();
			var oldValue = r1.text;
			var newValue = found ? select.options[i][property] : oldValue;
			if (newValue != field.value) {
				field.value = newValue;
				var rNew = field.createTextRange();
				rNew.moveStart('character', oldValue.length) ;
				rNew.select();
				}
			}
		}
	}
 

 accanto alla combo...
A grandi linee dovrebbe bastare la modifica di qualche linea, sia di quello
che ti ho indicato io sia di quello di Dan.
Giocaci un po'.
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.