When the Autocompleter is initialized, the options are set as such: ... this.options.minChars = this.options.minChars || 1; ...
Your 0 evaluates as false-ish, so trips over to 1. i'm pretty sure the reason for requiring at least 1 character in the lookup string is that the result list attempts to highlight the matching string pattern in bold, so when that string is empty, it could cause problems. Mostly that's a guess, but that line in the Autocompleter.baseInitialize is why you can't get a list on empty - it's not actually using your 0. As for why it generates a request on the empty string...i believe that's being triggered by the onKeyPress handler. It's intended to handle key navigation for the INPUT vs. the results list. Since it doesn't trap DELETE or BACKSPACE, it simply less their events pass through the handling down to this section: //// this.changed = true; this.hasFocus = true; if(this.observer) clearTimeout(this.observer); this.observer = setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); //// It tells other methods that the value has changed, has focus, and resets a timer to call the next Ajax request. Since you're handling empty strings on your server side, you see a successful round-trip AJAX request. But Autocompleter doesn't do anything with the result per the reason above. You'd have to write an override function of some sort, and make sure that the empty string doesn't harm other areas of the Autocompleter class. However, i recommend that you note to your user they can use some special character (usually *) to "search all", then handle the "*" on the server side. -joe t. On Mar 15, 12:58 pm, pipplo <joe.kos...@gmail.com> wrote: > Ok, I've done some more debug. > > The autocomplete text box works still. But it doesn't seem to work > with 0 chars. > > I can see when the user clicks in the text box a request is generated, > and a response is generated. I can use the chrome debugger to see that > the response is as expected. > > The AJAX request seems to just not render the HTML when the number of > chars is 0, even though it does all the work to generate a request and > parse the response. As soon as I type a character I get the expected > auto-complete results displayed. When I backspace back to 0 chars it > doesn't display anything, but it still does the AJAX request. > > There must be a place in prototype.js where there is a decision to > render the html or not? I can't seem to find it. So I'm just looking > for some hints on why that wouldn't happen sometimes.. > > On Mar 14, 11:27 am, pipplo <joe.kos...@gmail.com> wrote: > > > > > > > > > I have a weird bug that I'm having trouble debugging. I am using Rails > > but I think the issue is in the javascript handling somewhere. > > > I have a div with a form and autocomplete > > > <div id=form> > > <form info> > > <autocomplete box> > > </form> > > </div> > > > I have the options set so that when the user clicks in the auto- > > complete they get an initial list (minChars = 0) > > > When the user types a user name in the autocomplete and selects one of > > the drop down options I generate a request via Ajax and render the > > form again without the autocomplete. The user can then click 'remove' > > to remove the user info and re-draw the autocomplete box. > > > After the re-draw the minChars = 0 doesn't work. Whenever I click in > > the box I see a request generated to my controller, and I return the > > correct information but it doesn't get rendered into HTML and I dont > > see a drop down. > > > If the user types a letter or name then the dropdown lits does show > > up, but the initial ajax request never gets reflected. > > > I assume there is some state variable that thinks the text box hasn't > > changed value or something which is preventing actually rendering the > > HTML returned by Rails. > > > I hope that makes sense. Any ideas? > > > P.S. My current workaround is to just hide the autocomplete field and > > not render it empty. This works but won't be usable in other parts of > > my site. -- You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptaculous@googlegroups.com. To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en.