72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
//>>built
|
|
define("dijit/form/_RadioButtonMixin", [
|
|
"dojo/_base/array", // array.forEach
|
|
"dojo/_base/declare", // declare
|
|
"dojo/dom-attr", // domAttr.set
|
|
"dojo/_base/event", // event.stop
|
|
"dojo/_base/lang", // lang.hitch
|
|
"dojo/query", // query
|
|
"dojo/_base/window", // win.doc
|
|
"../registry" // registry.getEnclosingWidget
|
|
], function(array, declare, domAttr, event, lang, query, win, registry){
|
|
|
|
// module:
|
|
// dijit/form/_RadioButtonMixin
|
|
// summary:
|
|
// Mixin to provide widget functionality for an HTML radio button
|
|
|
|
return declare("dijit.form._RadioButtonMixin", null, {
|
|
// summary:
|
|
// Mixin to provide widget functionality for an HTML radio button
|
|
|
|
// type: [private] String
|
|
// type attribute on <input> node.
|
|
// Users should not change this value.
|
|
type: "radio",
|
|
|
|
_getRelatedWidgets: function(){
|
|
// Private function needed to help iterate over all radio buttons in a group.
|
|
var ary = [];
|
|
query("input[type=radio]", this.focusNode.form || win.doc).forEach( // can't use name= since query doesn't support [] in the name
|
|
lang.hitch(this, function(inputNode){
|
|
if(inputNode.name == this.name && inputNode.form == this.focusNode.form){
|
|
var widget = registry.getEnclosingWidget(inputNode);
|
|
if(widget){
|
|
ary.push(widget);
|
|
}
|
|
}
|
|
})
|
|
);
|
|
return ary;
|
|
},
|
|
|
|
_setCheckedAttr: function(/*Boolean*/ value){
|
|
// If I am being checked then have to deselect currently checked radio button
|
|
this.inherited(arguments);
|
|
if(!this._created){ return; }
|
|
if(value){
|
|
array.forEach(this._getRelatedWidgets(), lang.hitch(this, function(widget){
|
|
if(widget != this && widget.checked){
|
|
widget.set('checked', false);
|
|
}
|
|
}));
|
|
}
|
|
},
|
|
|
|
_onClick: function(/*Event*/ e){
|
|
if(this.checked || this.disabled){ // nothing to do
|
|
event.stop(e);
|
|
return false;
|
|
}
|
|
if(this.readOnly){ // ignored by some browsers so we have to resync the DOM elements with widget values
|
|
event.stop(e);
|
|
array.forEach(this._getRelatedWidgets(), lang.hitch(this, function(widget){
|
|
domAttr.set(this.focusNode || this.domNode, 'checked', widget.checked);
|
|
}));
|
|
return false;
|
|
}
|
|
return this.inherited(arguments);
|
|
}
|
|
});
|
|
});
|