90 lines
3.0 KiB
JavaScript
90 lines
3.0 KiB
JavaScript
define("dijit/form/_FormValueMixin", [
|
|
"dojo/_base/declare", // declare
|
|
"dojo/dom-attr", // domAttr.set
|
|
"dojo/keys", // keys.ESCAPE
|
|
"dojo/sniff", // has("ie"), has("quirks")
|
|
"./_FormWidgetMixin"
|
|
], function(declare, domAttr, keys, 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){
|
|
domAttr.set(this.focusNode, 'readOnly', value);
|
|
this._set("readOnly", value);
|
|
},
|
|
|
|
postCreate: function(){
|
|
this.inherited(arguments);
|
|
|
|
if(has("ie")){ // IE won't stop the event with keypress
|
|
this.connect(this.focusNode || this.domNode, "onkeydown", this._onKeyDown);
|
|
}
|
|
// 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);
|
|
},
|
|
|
|
_onKeyDown: function(e){
|
|
if(e.keyCode == keys.ESCAPE && !(e.ctrlKey || e.altKey || e.metaKey)){
|
|
if(has("ie") < 9 || (has("ie") && has("quirks"))){
|
|
e.preventDefault(); // default behavior needs to be stopped here since keypress is too late
|
|
var node = e.srcElement,
|
|
te = node.ownerDocument.createEventObject();
|
|
te.keyCode = keys.ESCAPE;
|
|
te.shiftKey = e.shiftKey;
|
|
node.fireEvent('onkeypress', te);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|