Okay, so the issue is that letsBreakStuff gets iterated together with the rest of the array, while it should be ignored, as it doesn't have a numerical index, right?
How does that relate to your patch? Jörn On Tue, Jul 1, 2008 at 11:36 AM, Bramus! <[EMAIL PROTECTED]> wrote: > > Hi Jörn, > > The problem in fact is Ext Related, yet can be reproduced without Ext: > any library that expands the Array prototype with a function can be > the wrongdoer. > > Create a new blank document (nothing needs to be in it), open up > firebug and paste in the code below: > > Array.prototype.letsBreakStuff = function(){return this}; > correct = [ > "baa", > "bah!", > "bar", > "bar!", > "beblog", > "bezar", > "blog", > "blub", > "blub!", > "boo", > "bramus" > ]; > > As you can see this in fact does work correct. > > However, I'm a great JSON-addict, and my autocompletion data - just as > any other call - is returned in the Object Literal Notation (and then > run through a custom parse function to get an autocomplete compatible > array). > > Now, open up Firebug again and paste in this code: > > Array.prototype.letsBreakStuff = function(){return this}; > wrong = { "data":[ > "baa", > "bah!", > "bar", > "bar!", > "beblog", > "bezar", > "blog", > "blub", > "blub!", > "boo", > "bramus" > ] > } > > Check wrong.data, you'll see that the last item is the letsBreakStuff > function. > > To make it all complete: the reason I named Ext is that I got the > remove function as last item on wrong.data ... which is added by Ext: > Ext.applyIf(Array.prototype,{indexOf:function(C){for(var > B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return > -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A, > 1)}return this}}); > > Hope you now see why exactly I suggested that little patch ;) > > Regards, > Bramus! > > On Jun 24, 3:57 pm, "Jörn Zaefferer" <[EMAIL PROTECTED]> > wrote: >> I don't quite the how the issue is related to ExtJS. It sounds like >> you pass functions instead of strings to the autocomplete plugin, >> which is the actual issue here. Could you upload a testpage and post >> the URL here? >> >> Jörn >> >> On Tue, Jun 24, 2008 at 1:03 PM, Bramus! <[EMAIL PROTECTED]> wrote: >> >> > Filed a ticket on dev.jquery including a .diff >> > file:http://dev.jquery.com/ticket/3080 >> > ;-) >> >> > Regards, >> > B! >> >> > PS: [autocomplete] prefix seems to be cut off subject? >> >> > On Jun 24, 11:15 am, "Bramus!" <[EMAIL PROTECTED]> wrote: >> >> Hi Jörn et all here at the list, >> >> >> I'm using the autocomplete plugin in a project I'm working on and I >> >> must say: it works great!. However: one part of the project uses ExtJS >> >> (their tree component is great) and that's where things go wrong. >> >> Problem is that somewhere in ExtJS they extend Object with a remove() >> >> function, breaking jQuery.autocomplete. >> >> >> After a little quest I found that - quite obviously - autocomplete >> >> breaks on string manipulations (Function.toLowerCase() doesn't really >> >> exist ;)) and has a minor issue when displaying the items whenever >> >> some library has extended Object. >> >> >> Here below are the 2 minor changes I implemented in order to make >> >> things work "just fine" again. Could you tuck 'm into the release as I >> >> can't commit any changes to the trunk. >> >> >> Change #1: Display issue: $.Autocompleter.Select, function fillList(): >> >> replace: >> >> if (!data[i]) >> >> with: >> >> if (!data[i] || (data[i].value.constructor === Function)) >> >> >> Change #2: Selection issue: $.Autocompleter.Cache, function >> >> matchSubset() >> >> at line#1 of this function (directly after the opening { ) add: >> >> if (s.constructor === Function) return false; >> >> >> Regards, >> >> Bramus! >