Click here to Skip to main content
Click here to Skip to main content

Autocomplete edit control for Javascript

By , 21 Aug 2003
 

Introduction

This is a HTML control which integrates autocomplete into the standard textbox. By adding a few lines of code, you can turn any standard textboxes into a user friendly and a rather powerful control.

How it works

Whenever the user types anything in the textbox, the onkeyup event is fired, and the script calls a function. The current text in the textbox is then compared lexically with an array of strings.

Javascript code

<script>
fruits = new Array('apple','pear','orange',
    'mango','durain','grapes','starfruit');
names = new Array('tom','dick','harry','john','petter','foo','bar');
function autocomplete(n,ac_array){
    if (n.value == "") return 0;
    if (event.keyCode == 8 && n.backspace){
        n.value = n.value.substr(0,n.value.length-1);
        n.backspace = false;
    }

    var r = n.createTextRange();    
    tmp= n.value;
    if (tmp == "")return 0;
    for (z=0;z<ac_array.length;z++){
        tmp2 = ac_array[z];
        count = 0;
        for (i = 0;i<tmp.length;i++){
            if (tmp2.charAt(i) == tmp.charAt(i)){
                count++
            }
        }
        if (count == tmp.length){
            diff = tmp2.length - tmp.length;
            if (diff <= 0) break;
            kap = "";
            for (i=0;i<tmp2.length;i++){
                if (i >= tmp.length) kap += tmp2.charAt(i);
            }
            n.backspace = true;
            r.text += kap;
            r.findText(kap,diff*-2);
            r.select();
            return 0;
        }
    }
    n.backspace = false;
    return 0;
}
</script>

<input name='fruit' type='text' class='textbox' title="Opening" 
    onkeyup="autocomplete(this,fruits)" size="20">
<input name='Name' type='text' class='textbox' title="Opening" 
    backspace='false' onkeyup="autocomplete(this,names)" size="20">

How to use the code

  1. You must define the array of strings which you want to have autocompleted.
    fruits = new Array('apple','pear','orange','mango','durain',
        'grapes','starfruit');
  2. Copy the entire autocomplete function and put it somewhere in your code.
  3. Add the event onkeyup='autocomplete(this,fruits)' in the textbox. Note that the 2nd argument should tally with the array name you defined at 1.
  4. Add the property backspace='false' in the textbox. The backspace property is applicable when a user press backspace in the textbox. It gets very irritating without the boolean; i.e. when the user press backspace, the highlighted characters get deleted, but it will automatically be replaced by the same characters due to the autocomplete.

Todo

  1. I've tested the autocomplete control with an array of size 150. The speed was pretty reasonable on my computer (P3 700Mhz). However, I'm sure the autocomplete function's string-matching algorithm can be further improved upon.
  2. Allow for case insensitive string-matching

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

zichun
Singapore Singapore
Member
I'm young and cool Smile | :)

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 1 Pinmemberhsnfrz3 Dec '12 - 1:59 
GeneralMy vote of 1 PinmemberRisvile28 Sep '11 - 5:00 
GeneralAutoComplete text box using PHP PEAR Class Pingroupelizas8 Mar '10 - 1:27 
GeneralMy vote of 2 Pinmembergopimayiru22 May '09 - 2:06 
GeneralNot working PinmemberMember 246109727 May '08 - 22:42 
QuestionAutocompletion PinmemberPratheesh Rajan4 Oct '07 - 2:17 
GeneralIs it possible to view all elements' list on particular character press Pinmemberanil22kar9 Sep '07 - 21:33 
GeneralProblem with 2 Edit Control !!! Pinmembersteeve.leprovost4 May '06 - 3:18 
GeneralRe: Problem with 2 Edit Control !!! Pinmembertah siah rek ngaran naon deui18 Dec '12 - 7:44 
Generalnew version Pinmemberdavidlars9921 Feb '06 - 9:32 
Generalmozilla Pinsussvadd__26 Feb '05 - 4:35 
GeneralMuch better... Pinmemberpackard7526 Oct '04 - 19:38 
GeneralRe: Much better... Pinmemberzichun27 Feb '05 - 21:35 
GeneralNot working with mozilla PinsussAnonymous24 Jun '04 - 6:41 
GeneralTo complete in the hole textrange.. PinsussAnonymous25 Feb '04 - 2:02 
GeneralError PinmemberEmelian17 Jan '04 - 17:34 
GeneralRe: Error Pinmemberzichun17 Jan '04 - 17:55 
GeneralRe: Error PinmemberEmelian17 Jan '04 - 18:35 
GeneralRe: Error Pinmemberzichun17 Jan '04 - 19:22 
GeneralMake Case Insensitive PinsussThe Silverlord4 Sep '03 - 23:16 
GeneralRe: Make Case Insensitive Pinmemberzichun5 Sep '03 - 5:35 
QuestionHow about a sever control? PinmemberPaul Haley29 Aug '03 - 12:07 
AnswerRe: How about a sever control? Pinmemberchenggn8 Apr '06 - 5:22 
GeneralAll OK, but ... PinmemberMandalay23 Aug '03 - 20:45 
GeneralRe: All OK, but ... Pinmemberzichun24 Aug '03 - 3:35 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130523.1 | Last Updated 22 Aug 2003
Article Copyright 2003 by zichun
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid