11548 sujets

JavaScript, DOM et API Web HTML5

Salut à tous,

Voilà le problème, lorsque sur IE (et d'autres ?) on se positionne sur une liste déroulante, le fait d'appuyer sur une touche positionne la liste sur le premiere élément dont la première lettre correspond à celle enfoncée.
Pas pratique sur des listes longues.

Proposition :
<select onkeypress='return AideSelect(this);'>
<option value=''></option>
<option value='1'>A</option>
<option value='2'>AB</option>
<option value='20'>BA</option>
<option value='3'>BE</option>
<option value='4'>BER</option>
<option value='5'>BI</option>

<script>
function AideSelect(objSelect) {
	if (objSelect.strBuffer==undefined) {objSelect.setAttribute('strBuffer','',1);}
	objSelect.strBuffer+=String.fromCharCode(window.event.keyCode);
	var result= new RechercheItem(objSelect) // on cherche des items correspondants
	if (!result.qqChose) {//rien trouvé de mieux
		objSelect.strBuffer=String.fromCharCode(window.event.keyCode); //on repart avec la dernière touche et on recommence
		result= new RechercheItem(objSelect)
		if (result.qqChose) {objSelect.selectedIndex = result.gotoIndex;}
	} else {
		objSelect.selectedIndex = result.gotoIndex
	}
	return false;
}
function RechercheItem(objSelect) {
	this.gotoIndex = objSelect.selectedIndex;
	this.qqChose= false;
	for ( var cpt = 0; cpt < objSelect.options.length; cpt++ ) {
		if ( objSelect.options[cpt].text.toLowerCase().indexOf(objSelect.strBuffer.toLowerCase()) == 0 ) {
			this.gotoIndex = cpt;
			this.qqChose=true;
			break;
		}
	}
}
</script>


avez vous d'autres technique à base de select?
Modifié par CanardWc (07 Mar 2006 - 16:04)
Bonjour, je ne vois pas l'intérêt du script car avec ou sans j'obtiens le même fonctionnement ? Smiley lol
Bonjour,
Je possède un script similaire au tien, si ça t'intéresse.
par là.

EDIT : Ce script est inutile sous firefox car les listes fonctionnnt déjà de cette manière en natif.
Modifié par QuentinC (07 Mar 2006 - 17:48)