Bug Tracker

Opened 12 years ago

Closed 12 years ago

#2445 closed bug (wontfix)

"this" refers to window object in $.map()

Reported by: ratbeard Owned by: flesler
Priority: minor Milestone: 1.3
Component: core Version: 1.2.3
Keywords: map Cc:
Blocked by: Blocking:

Description

Hello,

I found that 'this' inside of the callback function in $.map() refers to the window object, and not the current unmapped value. This is inconsistent with the other iteration functions, i.e. $().map, $.each, and with the jQuery documentation at http://docs.jquery.com/Utilities/jQuery.map#arraycallback Here's an example that shows the different behavior between using 'this' and the passed in element object:

$.map(["hey"], function(el) { return $('<div>').text(el + ' yo'); })[0].appendTo('body');

--> "hey yo"

$.map(["hey"], function(el) { return $('<div>').text(this + ' yo'); })[0].appendTo('body');

--> "[object Window] yo"

Its a small fix - just calling the callback in the elements scope. I've attached a diff that fixes the problem.

Mike

Attachments (2)

jquery-1.2.3-fix.txt (119 bytes) - added by ratbeard 12 years ago.
diff generated from my patch and jquery-1.2.3.js
jquery-map-test.html (580 bytes) - added by ratbeard 12 years ago.
A test page that shows the problem

Download all attachments as: .zip

Change History (4)

Changed 12 years ago by ratbeard

Attachment: jquery-1.2.3-fix.txt added

diff generated from my patch and jquery-1.2.3.js

Changed 12 years ago by ratbeard

Attachment: jquery-map-test.html added

A test page that shows the problem

comment:1 Changed 12 years ago by flesler

Owner: set to flesler
Status: newassigned

Yes, this is pretty clear. The docs say:

this; // unmapped

I'm not sure if that means "the unmapped element" or "unmapped" as in, not-forced => window. I'll ask around and will fix this if correct.

comment:2 Changed 12 years ago by flesler

Milestone: 1.2.41.3
Resolution: wontfix
Status: assignedclosed

It was fixed in the docs. The this won't point to the element when mapping (or 'grepping').

Note: See TracTickets for help on using tickets.