Okay, thanks for the clarification. Though I still can't reproduce the
problem your describe - the autocomplete iterates over the data array
with an index-based for loop, and anything added to the array
prototype is ignored.

Can you provide a testpage where the issue actually occurs in
combination to the autocomplete plugin?

Btw., Firebug displays the array in different ways, but the
letsBreakStuff property is there in both cases.

Jörn

On Tue, Jul 1, 2008 at 4:59 PM, Bramus! <[EMAIL PROTECTED]> wrote:
>
> Hi Jörn,
>
> exactly, the function gets iterated too and is considered as the last
> element of the array. When passed on to autocomplete, it will break as
> s.toLowerCase() is invalid when s isn't a string. Therefore; my patch
> over at http://dev.jquery.com/attachment/ticket/3080/jquery.autocomplete.diff
> (2 little additions to make autocomplete even more idiotproof than it
> already is ;))
>
> On a sidenote: The strangest part of it all is that the letsBreakStuff
> function doesn't get applied on "normal" arrays (see the correct array
> in the example mentioned earlier) but only to arrays created as an
> element of an Object (or so it seems in the wrong array mentioned
> earlier).
>
> Regards,
> Bram.
>
> On Jul 1, 3:47 pm, "Jörn Zaefferer" <[EMAIL PROTECTED]>
> wrote:
>> 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!
>

Reply via email to