Thanks Tom! Digesting now.... feedback after checking it out. Much obliged.
On Apr 15, 5:40 pm, Tom Worster <f...@thefsb.org> wrote: > i have an ajax backend onto a mysql table with about 25 million rows, > including three searchable indexed text columns. i want a form with three > text input fields, each with autocomplete. > > 1) if all fields are blank when the user starts to type into one of them > then normal autocomplete happens on that field, independent of the others. > > 2) but if the user focuses on an empty field after an autocomplete selection > has been made in one or both of the other fields then a list of all distinct > values in that column of the big table, constrained by the selection(s) > already made, is immediately displayed without any typing. > > each of the three fields has class 'auto' and there are three blocks like > this one: > > $('#field1').autocomplete('suggest.php', { > extraParams: { > p: 'field1', > field2: function() { return $('#field2').data('chosen') > ? $('#field2').val() : ''; }, > field3: function() { return $('#field3').data('chosen') > ? $('#field3').val() : ''; } } }); > > so the back end can figure what's being looked for and what the constraints > are, if any. > > to make a list of suggestions display on focus for 2) i have: > > var lastfocus = ''; > $('.auto').setOptions({ minChars: 2}).focus(function(){ > > if ( lastfocus != $(this).attr('id') > && $(this).val() == '' > && ( $('#field').data('chosen') > || $('#field2').data('chosen') > || $('#field3').data('chosen') ) ) > $(this).data('chosen', false).setOptions( > {minChars: 0}).trigger('click').trigger('click'); > else > $(this).setOptions({minChars: 2}); > lastfocus = $(this).attr('id');}).change(function(){ > > $(this).data('chosen', false); > lastfocus = $(this).attr('id');}).result(function(){ > > $(this).data('chosen', true); > > }); > > lastfocus is a hack: the focus event on a field triggers after a selection > is made by clicking. i.e. with mouse selection focus moves to the list and > then back to the text field. lastfocus deals with that. > > the 'chosen' data on each field indicates if the value in that field is one > selected from the big table. > > two clicks are needed after setting minChars to 0 to display the list of > suggestions. this is a quirk of the plugin. > > this is my first version of a script that seems to work in a way that > wouldn't be too surprising to an unprepared user. i haven't given it much > testing yet. comments and improvements would be welcomed. > > tom