Search and Top Navigation
#8462 closed bug (notabug)
Opened July 26, 2012 04:23PM UTC
Closed July 26, 2012 04:26PM UTC
Mask: - _parseValue parses values outside the range of each parts buffer
Reported by: | flamewave | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | 1.9.0 |
Component: | ui.widget | Version: | git (not yet released) |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
The
_parseValuemethod of the Mask widget was not properly parsing the values from the masking. If a buffer matched more than one part of the masked value, the last matching value would be used even if it was outside the start and end indexes of the buffer item.
For example, with the following mask:
"__/__/____"with definition functions for parsing a date in the
"MM/dd/yyyy"format, if the value
"__/__/2012"was set when the
_parseValuemethod was called, it would modify the input value to be
"01/02/____".
I was able to fix this issue by changing the _parseValue method to the following:
#!js _parseValue: function() { var bufferPosition, bufferObject, character, valuePosition = 0, lastFilledPosition = -1, value = this.element.val(), bufferLength = this.buffer.length; // remove all current values from the buffer this._removeValues(0, bufferLength); // seek through the buffer pulling characters from the value for (bufferPosition = 0; bufferPosition < bufferLength; bufferPosition += bufferObject.length) { bufferObject = this.buffer[bufferPosition]; for (valuePosition = 0; valuePosition < bufferObject.length; valuePosition++) { character = value.substr(bufferObject.start + valuePosition, bufferObject.length - valuePosition); if (bufferObject.literal) { if (!this._validValue(bufferObject, character)) { // when parsing a literal from a raw .val() if it doesn't match, assume that the literal is missing from the val() break; } } character = this._validValue(bufferObject, character); if (character) { bufferObject.value = character; lastFilledPosition = bufferPosition + bufferObject.length - 1; break; } } // allow "default values" to be passed back from the buffer functions if (!bufferObject.value && (character = this._validValue(bufferObject, ""))) bufferObject.value = character; } return lastFilledPosition; }
I am unable to include a test case because neither jsFiddle or jsbin allow you to include the git/mask version of jQuery UI.
Attachments (0)
Change History (1)
Changed July 26, 2012 04:26PM UTC by comment:1
resolution: | → invalid |
---|---|
status: | new → closed |
Mask is not a supported plugin as it is not released.