Skip to content

Instantly share code, notes, and snippets.

@jharding
Last active April 24, 2021 06:46
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save jharding/9458744 to your computer and use it in GitHub Desktop.
Save jharding/9458744 to your computer and use it in GitHub Desktop.
<div id="the-basics">
<input class="typeahead" type="text" placeholder="States of USA">
</div>
var substringMatcher = function(strs) {
return function findMatches(q, cb) {
var matches, substringRegex;
// an array that will be populated with substring matches
matches = [];
// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');
// iterate through the pool of strings and for any string that
// contains the substring `q`, add it to the `matches` array
$.each(strs, function(i, str) {
if (substrRegex.test(str)) {
matches.push(str);
}
});
cb(matches);
};
};
var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California',
'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii',
'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana',
'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota',
'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',
'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota',
'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island',
'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont',
'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'
];
$('#the-basics .typeahead').typeahead({
hint: true,
highlight: true,
minLength: 1
},
{
name: 'states',
source: substringMatcher(states)
});
@rewmike
Copy link

rewmike commented Apr 8, 2014

Line 3 on the-basics.js

substringRegex should be renamed to substrRegex

Otherwise error occurs when using strict mode:

ReferenceError: assignment to undeclared variable substrRegex'

@eddieh
Copy link

eddieh commented May 10, 2014

Basically the same as rewmike's comment.

Line 9 creates a global variable substrRegex rather than assigning a value to the local variable substringRegex

@jharding
Copy link
Author

jharding commented Jul 8, 2014

Fixed. Thanks for the heads up.

@koppor
Copy link

koppor commented Oct 28, 2014

What is the license of this example? Same as the license of typeahead.js?

@guyzi
Copy link

guyzi commented Jan 29, 2015

It says license MIT at the top of the page

@swingley
Copy link

The latest revision re-introduced the accidental global issue that rewmike and eddieh pointed out.

@razvan100
Copy link

Hi,

This example doesn't work for me. Does anyone know where the style class "typeahead" resides? Or are there any working examples with this version of typeahead 0.11.1? The only typeahead which works for me is hosted somewhere else: http://mycodde.blogspot.de/2013/12/typeaheadjs-autocomplete-tutorial-ajax.html
And uses an older version.

Thanks!

@themightychris
Copy link

This could be a lot simpler with $.grep

@visnupriya
Copy link

Hi,
It shows only 5 matches instead of all matched string. How to show all matches?

@skycocker
Copy link

@jharding this is the updated working version, could you change yours to this?
https://gist.github.com/skycocker/382c76f696c50a165585

@user24
Copy link

user24 commented May 29, 2015

+1

@mcxvio
Copy link

mcxvio commented Mar 3, 2016

I could only get this working after I added the handlebars script to the-basics.html page (after I did ViewSource on the examples page).
Is that correct, it doesn't seem the right way to me?

@programulya
Copy link

Hi all,
Example still contains some mistake with substrRegex variable.

var substringMatcher = function (strs) {
     return function findMatches(q, cb) {         
            // regex used to determine if a string contains the substring `q`
            var substringRegex = new RegExp(q, 'i');

            // an array that will be populated with substring matches
            var matches = [];

            // iterate through the pool of strings and for any string that
            // contains the substring `q`, add it to the `matches` array
            $.each(strs, function (i, str) {
                if (substringRegex.test(str)) {
                    matches.push(str);
                }
            });

            cb(matches);
        };        
};

In this function:

  • fixed usage of substringRegex variable;
  • declaring variables moved exactly before usage.

@phily245
Copy link

phily245 commented Jul 15, 2016

Hi,
This example currently displays the result as "Undefined", as the value being pushed is a string, but it seems an object is expected in the format of [{value: "string1"}, {value: "string2"}, {value: "string3"}] according to this post on Stack Overflow. I have amended this in my fork, by changing the following on line 15 of the-basics.js:
matches.push(str);
to
matches.push({value: str});
Please feel free to merge this @jharding.

@rynraf
Copy link

rynraf commented Dec 18, 2016

Thank you phily245! This small change resolve issue with "undefined" suggestions.
It's little strange that author publish as a first example code which not works... ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment