Opened 16 years ago
Closed 15 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)
Change History (4)
Changed 16 years ago by
Attachment: | jquery-1.2.3-fix.txt added |
---|
comment:1 Changed 15 years ago by
Owner: | set to flesler |
---|---|
Status: | new → assigned |
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 15 years ago by
Milestone: | 1.2.4 → 1.3 |
---|---|
Resolution: | → wontfix |
Status: | assigned → closed |
It was fixed in the docs. The this won't point to the element when mapping (or 'grepping').
diff generated from my patch and jquery-1.2.3.js