/** * Constructeur de la classe * @param element l'element DOM sur lequel s'applique l'autocompletion */ function autocomplete(element, focus) { this.select = element; this.options = null; this.charSequence = null; this.regex = null; this.enablePropagation = false; this.keydownHandler = null; this.unloadHandler = null; this.init(focus); } /** * Initialisation de la classe, sauvegarde les options initiales, attache les gestionnaires d'évenements, préserve l'action du onchange */ autocomplete.prototype.init = function(focus) { this.options = new Array(); this.charSequence = ""; window.cancelOnChange = false; for(var v=0; v> Filtre : " + this.charSequence + " (ECHAP pour annuler, <-- pour effacer le dernier caractère)"; } /** * Filtre les données de la liste avec le masque représenté par la valeur de charSequence */ autocomplete.prototype.filter = function() { this.select.options.length = 0; this.regex = new RegExp("^" + this.charSequence, "gi"); if(this.charSequence != "") { this.select.options[this.select.options.length] = new Option(this.getDisplayedFilterMessage(),""); this.select.options[this.select.options.length-1].style.fontStyle = "italic"; this.select.options[this.select.options.length-1].style.color = "#6F6F6F"; } for(var v=0; v= 48 && charCode <= 90) || (charCode >=96 && charCode <=106)) { this.charSequence += this.getKey(charCode); this.filter(); this.handleEventPropagation(evt); return false; } // laisse passer les autres touches else { return true; } } else { window.cancelOnChange = false; return true; } } /** * Décharge le composant de la mémoire * Cette méthode est appelée automatiquement quand la page est déchargée */ autocomplete.prototype.unload = function() { if (window.removeEventListener) { this.select.removeEventListener("keydown",this.keydownHandler,false); window.removeEventListener("beforeunload", this.unloadHandler,false); } else if(window.detachEvent) { this.select.detachEvent("onkeydown",this.keydownHandler); window.detachEvent("onbeforeunload", this.unloadHandler); } else { this.select.onkeydown = null; window.onbeforeunload = null; } this.select = null; this.options = null; this.charSequence = null; this.regex = null; this.keydownHandler = null; this.unloadHandler = null; }