Bug Tracker

Modify

Ticket #2445 (closed bug: wontfix)

Opened 5 years ago

Last modified 5 years ago

"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:
Blocking: Blocked by:

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

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

Change History

Changed 5 years ago by ratbeard

diff generated from my patch and jquery-1.2.3.js

Changed 5 years ago by ratbeard

A test page that shows the problem

comment:1 Changed 5 years ago by flesler

  • Owner set to flesler
  • Status changed from new to 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 5 years ago by flesler

  • Status changed from assigned to closed
  • Resolution set to wontfix
  • Milestone changed from 1.2.4 to 1.3

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

Please follow the  bug reporting guidlines and use  jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

View

Add a comment

Modify Ticket

Action
as closed
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.