Side navigation
#10800 closed bug (wontfix)
Opened November 16, 2011 10:05AM UTC
Closed November 16, 2011 01:12PM UTC
Last modified November 17, 2011 08:46AM UTC
Delegation doesn't work well with :last selector
Reported by: | anonymous | Owned by: | |
---|---|---|---|
Priority: | low | Milestone: | None |
Component: | event | Version: | 1.7 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
Hi,
This is my first post here.
There is a regression in jquery 1.7 when you use delegation such as $('tbody').delegate("tr:last", "change", function(e) {...}), if you have several tables on your page for example.
The same thing with the new 'on' event API.
You will find a use case here: http://jsfiddle.net/APyU7/2/
The event is triggered only on the last tr of the second table. It works with jquery 1.6.4.
Regards.
Attachments (0)
Change History (2)
Changed November 16, 2011 01:12PM UTC by comment:1
component: | unfiled → event |
---|---|
priority: | undecided → low |
resolution: | → wontfix |
status: | new → closed |
Changed November 17, 2011 08:46AM UTC by comment:2
ok, I understand.
As the :last worked before, I never noticed such a subtlety. Going deeper in the documentation, I saw some comments on it. "tr:last-child" is exactly what I need.
Thanks for your help, your work, and for this great library !
This is a regression, but it's due to fixing a bug and creating a consistent meaning for positional selectors like ":last", ":first", etc.
In 1.7 we have updated the docs to recommend against positional selectors because their meaning is ambiguous and they are very inefficient. We fixed a couple of bugs related to the way they work and this is a side-effect of that.
When you say $("tr:last") you are selecting the last tr on the page. The event delegation and .is(":last") now goes through the same code path so it also selects the last tr on the page. If you want the last tr in *each* table, use "tr:last-child" which is a standard W3C selector and in general is also much faster.