Yesterday I struggled to find a way to filter all dijits in a root container (in my case a simple <div>) to toggle their enabled/disabled state. The approach I was using before looked like this:
dojo.query("input, button, textarea, select", rootContainer).attr("disabled", disable);
This approach used to work fine until I also wanted to include <buttons>. Unfortunately, dojo.query() failed to filter buttons… Every scenario I’ve tried only revealed inputs (except input type=button), textareas, selects, etc.
Anyway, the solution was to filter all DOM-nodes by their “widgetId” attribute and convert to their respective dijits through dijit.byNode, as explained by dante in http://stackoverflow.com/questions/1372013/dojo-disable-all-input-fields-in-div-container.
Thus, the final solution I came up with was to use a wrapper function:
/**
* Disables all dijits found in rootContainer specified. The params directly
* refer to dojo.quer().
* @param String limitations
* @param String|Object rootContainer
*/
disableDijits : function(limitations, rootContainer) {
var widgets = dojo.query(limitations, rootContainer).map(dijit.byNode);
dojo.forEach(widgets, function(w) {
w.attr('disabled', disable);
});
}