Yep, that's a bug!  The solution is to save the original handler before
entering the loop, and then restoring it just inside the loop, then it
should behave correctly.  Unfortunately, that means a tiny bit of overhead
all the time, to catch an edge case.  The actual jQuery developers (I am not
one) need to weigh in on this one and discuss whether or not this edge case
is worth the overhead for, or if they can think of a solution that does not
incur the performance penalty.  (Not that it is a performance hit that would
be likely to be noticed)

The next step is probably to submit a defect against it.  Done.  Ticket
#5779.

On Sat, Jan 9, 2010 at 11:20 PM, helianthus <project.heliant...@gmail.com>wrote:

> I have just looked into the code and have found out where it goes
> wrong.
>
> It is at this line:
> http://github.com/jquery/jquery/blob/master/src/event.js#L102
> where it overwrites the original handler with a modified one even for
> other types.
>
> On Jan 10, 12:24 pm, John Arrowwood <jarro...@gmail.com> wrote:
> > First thing I'd like to know is, in the special handler where it says
> > "special add handler for type: click", replace click with event.type like
> in
> > the bind() call, and see if anything changes.  It shouldn't, but it's a
> data
> > point.  Also, try doing the bind as 'keydown click' and see if the
> problem
> > goes away.
> >
> > Also, try it again with jQuery 1.3.2 and see if it behaves the same way.
>  If
> > not, it is a regression that somebody needs to look at.
> >
> > -- John
> >
> > On Sat, Jan 9, 2010 at 6:46 PM, helianthus <project.heliant...@gmail.com
> >wrote:
> >
> >
> >
> >
> >
> > > Here is the test page:http://jsbin.com/ajuxi
> >
> > > Notice when a keyboard key is pressed the special add handler message
> > > is shown.
> >
> > > On Jan 10, 5:54 am, John Arrowwood <jarro...@gmail.com> wrote:
> > > > Okay, so I read the article.  I get the basic idea.  I've also read
> the
> > > > code.  Based on what you have said, I still think you have not
> provided
> > > > enough information to understand what the problem is.
> >
> > > > Let's see some sample code.  A test page that shows the problem.
> >
> > > > On Sat, Jan 9, 2010 at 12:39 AM, helianthus <
> > > project.heliant...@gmail.com>wrote:
> >
> > > > > jQuery.event.special.click.add does not do what you think it does,
> > > > > perhaps this article will help you understand my problem:
> > > > >
> http://brandonaaron.net/blog/2009/06/4/jquery-edge-new-special-event-.
> > > ..
> >
> > > > > I expect it to add an event listener to 'anothertype' event, but
> > > > > without modifying the handler for 'anothertype' event, which is
> > > > > intended for 'click' event only.
> >
> > > > > On Jan 9, 4:15 pm, John Arrowwood <jarro...@gmail.com> wrote:
> > > > > > I've never used that feature, but I'm looking through the jQuery
> > > code...
> >
> > > > > > If you have defined jQuery.event.special.click, then you later
> call
> > > > > > bind('click',fn), it will first call your
> > > > > jQuery.event.special.click.setup()
> > > > > > function, and will only add the function as an event handler if
> your
> > > > > setup
> > > > > > function returns false.
> >
> > > > > > In your example, as the code loops through 'click' and then on to
> > > > > > 'anothertype,' it will not find a special handler for
> 'anothertype'
> > > and
> > > > > so
> > > > > > it will do the 'normal' thing of adding an event listener to the
> > > element.
> >
> > > > > > Your question implies that you expect it not to.  Why would you
> > > expect it
> > > > > > not to add an event listener to the 'anothertype' event?  What
> should
> > > be
> > > > > > stopping it from doing so?
> >
> > > > > > On Sat, Jan 9, 2010 at 12:03 AM, helianthus <
> > > > > project.heliant...@gmail.com>wrote:
> >
> > > > > > > Sorry for not being clear enough.
> > > > > > > That is because in my example the special add handler is
> supposed
> > > to
> > > > > > > modify click event handlers only.
> > > > > > > A special event add handler is something like this:
> > > > > > > jQuery.event.special.click = {
> > > > > > >   add: function() { return function() { ... }; }
> > > > > > > };
> >
> > > > > > > On Jan 9, 3:48 pm, John Arrowwood <jarro...@gmail.com> wrote:
> > > > > > > > Your question is not clear.  When you do .bind('event1
> > > event2',fn)
> > > > > you
> > > > > > > add
> > > > > > > > an event handler for both events.  This is to be expected.
>  So
> > > why
> > > > > would
> > > > > > > you
> > > > > > > > think that the code below would not modify the 'anothertype'
> > > event?
> >
> > > > > > > > On Fri, Jan 8, 2010 at 10:58 PM, helianthus <
> > > > > > > project.heliant...@gmail.com>wrote:
> >
> > > > > > > > > For example,
> > > > > > > > > if I had created a special add handler for click event,
> > > > > > > > > when I do something like jQuery.bind('click anothertype',
> > > > > function()
> > > > > > > > > {...}),
> > > > > > > > > the handler of anothertype is also modified.
> >
> > > > > > > > > If the above is not clear enough I can write a test case.
> >
> > > > > > > > > --
> > > > > > > > > You received this message because you are subscribed to the
> > > Google
> > > > > > > Groups
> > > > > > > > > "jQuery Development" group.
> > > > > > > > > To post to this group, send email to
> > > jquery-...@googlegroups.com.
> > > > > > > > > To unsubscribe from this group, send email to
> > > > > > > > > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > > > <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > > > > > <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > > > > > > > .
> > > > > > > > > For more options, visit this group at
> > > > > > > > >http://groups.google.com/group/jquery-dev?hl=en.
> >
> > > > > > > > --
> > > > > > > > John Arrowwood
> > > > > > > > John (at) Irie (dash) Inc (dot) com
> > > > > > > > John (at) Arrowwood Photography (dot) com
> > > > > > > > John (at) Hanlons Razor (dot) com
> > > > > > > > --
> > >http://www.irie-inc.com/http://arrowwood.blogspot.com/-Hidequoted
> > > > > > > text -
> >
> > > > > > > > - Show quoted text -
> >
> > > > > > > --
> > > > > > > You received this message because you are subscribed to the
> Google
> > > > > Groups
> > > > > > > "jQuery Development" group.
> > > > > > > To post to this group, send email to
> jquery-...@googlegroups.com.
> > > > > > > To unsubscribe from this group, send email to
> > > > > > > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > > > <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > > > > > .
> > > > > > > For more options, visit this group at
> > > > > > >http://groups.google.com/group/jquery-dev?hl=en.
> >
> > > > > > --
> > > > > > John Arrowwood
> > > > > > John (at) Irie (dash) Inc (dot) com
> > > > > > John (at) Arrowwood Photography (dot) com
> > > > > > John (at) Hanlons Razor (dot) com
> > > > > > --
> http://www.irie-inc.com/http://arrowwood.blogspot.com/-Hidequoted
> > > > > text -
> >
> > > > > > - Show quoted text -
> >
> > > > > --
> > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > "jQuery Development" group.
> > > > > To post to this group, send email to jquery-...@googlegroups.com.
> > > > > To unsubscribe from this group, send email to
> > > > > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/jquery-dev?hl=en.
> >
> > > > --
> > > > John Arrowwood
> > > > John (at) Irie (dash) Inc (dot) com
> > > > John (at) Arrowwood Photography (dot) com
> > > > John (at) Hanlons Razor (dot) com
> > > > --http://www.irie-inc.com/http://arrowwood.blogspot.com/-Hide quoted
> > > text -
> >
> > > > - Show quoted text -
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "jQuery Development" group.
> > > To post to this group, send email to jquery-...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> <jquery-dev%2bunsubscr...@googlegrou­ps.com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/jquery-dev?hl=en.
> >
> > --
> > John Arrowwood
> > John (at) Irie (dash) Inc (dot) com
> > John (at) Arrowwood Photography (dot) com
> > John (at) Hanlons Razor (dot) com
> > --http://www.irie-inc.com/http://arrowwood.blogspot.com/- Hide quoted
> text -
> >
> > - Show quoted text -
>
> --
> You received this message because you are subscribed to the Google Groups
> "jQuery Development" group.
> To post to this group, send email to jquery-...@googlegroups.com.
> To unsubscribe from this group, send email to
> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/jquery-dev?hl=en.
>
>
>
>


-- 
John Arrowwood
John (at) Irie (dash) Inc (dot) com
John (at) Arrowwood Photography (dot) com
John (at) Hanlons Razor (dot) com
--
http://www.irie-inc.com/
http://arrowwood.blogspot.com/
--
You received this message because you are subscribed to the Google Groups "jQuery Development" group.
To post to this group, send email to jquery-...@googlegroups.com.
To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en.

Reply via email to