dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
82 lines (71 loc) • 2.81 kB
JavaScript
define([
"dojo/_base/declare", // declare
"dojo/dom-attr", // domAttr.set
"dojo/keys", // keys.ESCAPE
"dojo/_base/lang",
"dojo/on",
"dojo/sniff", // has("webkit")
"./_FormWidgetMixin"
], function(declare, domAttr, keys, lang, on, has, _FormWidgetMixin){
// module:
// dijit/form/_FormValueMixin
return declare("dijit.form._FormValueMixin", _FormWidgetMixin, {
// summary:
// Mixin for widgets corresponding to native HTML elements such as `<input>` or `<select>`
// that have user changeable values.
// description:
// Each _FormValueMixin represents a single input value, and has a (possibly hidden) `<input>` element,
// to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
// works as expected.
// readOnly: Boolean
// Should this widget respond to user input?
// In markup, this is specified as "readOnly".
// Similar to disabled except readOnly form values are submitted.
readOnly: false,
_setReadOnlyAttr: function(/*Boolean*/ value){
// IE has a Caret Browsing mode (hit F7 to activate) where disabled textboxes can be modified
// focusNode enforced readonly if currently disabled to avoid this issue.
if (has('trident') && 'disabled' in this) {
domAttr.set(this.focusNode, 'readOnly', value || this.disabled);
} else {
domAttr.set(this.focusNode, 'readOnly', value);
}
this._set("readOnly", value);
},
postCreate: function(){
this.inherited(arguments);
// Update our reset value if it hasn't yet been set (because this.set()
// is only called when there *is* a value)
if(this._resetValue === undefined){
this._lastValueReported = this._resetValue = this.value;
}
},
_setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
// summary:
// Hook so set('value', value) works.
// description:
// Sets the value of the widget.
// If the value has changed, then fire onChange event, unless priorityChange
// is specified as null (or false?)
this._handleOnChange(newValue, priorityChange);
},
_handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
// summary:
// Called when the value of the widget has changed. Saves the new value in this.value,
// and calls onChange() if appropriate. See _FormWidget._handleOnChange() for details.
this._set("value", newValue);
this.inherited(arguments);
},
undo: function(){
// summary:
// Restore the value to the last value passed to onChange
this._setValueAttr(this._lastValueReported, false);
},
reset: function(){
// summary:
// Reset the widget's value to what it was at initialization time
this._hasBeenBlurred = false;
this._setValueAttr(this._resetValue, true);
}
});
});