Search and Top Navigation
#3235 closed bug (fixed)
Opened August 20, 2008 07:01AM UTC
Closed August 21, 2008 04:19PM UTC
Last modified October 11, 2012 09:15PM UTC
datepicker id generation not unique; with patch
Reported by: | mattwallace | Owned by: | grabanski |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | ui.datepicker | Version: | 1.6b |
Keywords: | Cc: | matt@daz3d.com | |
Blocked by: | Blocking: |
Description
Datepicker automatically assigns ids when one is not present. However, it uses new Date().getTime(), which only is granular to the millisecond level. However, calling the datepicker instantiation method on a class, ie, $("div.calpick").datepicker({ selectRange: false });, or such, can easily result in the datepicker trying to assign the same id because it handles more than 1 per millisecond.
This patch creates a .uuid variable in the singleton and assigns its incremented value as an addition to the Date().getTime() call; although I imagine you could probably get rid of the getTime call entirely, but I left it in. I tested this and it worked fine resolving my issue.
Although I am using a personalized bundle, I added a couple lines of context to this diff to make it clear where I changed lines:
*** jquery-ui.js Tue Aug 19 17:06:08 2008 --- /tmp/jquery-ui-personalized-1.6b.js Fri Aug 15 15:51:54 2008 *************** *** 2366,2370 **** var inline = (nodeName == 'div' || nodeName == 'span'); if (!target.id) ! target.id = 'dp' + new Date().getTime() + ++$.datepicker.uuid; var inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}, inlineSettings || {}); --- 2366,2370 ---- var inline = (nodeName == 'div' || nodeName == 'span'); if (!target.id) ! target.id = 'dp' + new Date().getTime(); var inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}, inlineSettings || {}); *************** *** 2460,2464 **** var inst = this._dialogInst; // internal instance if (!inst) { ! var id = 'dp' + new Date().getTime() + ++$.datepicker.uuid; this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>'); --- 2460,2464 ---- var inst = this._dialogInst; // internal instance if (!inst) { ! var id = 'dp' + new Date().getTime(); this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>'); *************** *** 3868,3872 **** $.datepicker = new Datepicker(); // singleton instance $.datepicker.initialized = false; - $.datepicker.uuid = 0; // for creating unique identifiers })(jQuery); --- 3868,3871 ----
Attachments (0)
Change History (3)
Changed August 20, 2008 07:04AM UTC by comment:1
Changed August 21, 2008 04:19PM UTC by comment:2
resolution: | → fixed |
---|---|
status: | new → closed |
Fixed. Start with current time in milliseconds and then increment for each ID.
Changed October 11, 2012 09:15PM UTC by comment:3
milestone: | TBD |
---|
Milestone TBD deleted
My bad! I submitted the diff backwards.
Forwards diff: