有没有办法禁用dojo的div容器中的所有输入字段?
就像是:
dijit.byId('main').disable -> Input
Eugene Lazut.. 11
这就是我这样做的方式:
dojo.query("input, button, textarea, select", container).attr("disabled", true);
此单行禁用给定容器中的所有表单元素.
这就是我这样做的方式:
dojo.query("input, button, textarea, select", container).attr("disabled", true);
此单行禁用给定容器中的所有表单元素.
当然有.例如,打开此表单测试页面,启动FireBug并在控制台中执行:
var container = dojo.query('div')[13]; console.log(container); dojo.query('input', container).forEach( function(inputElem){ console.log(inputElem); inputElem.disabled = 'disabled'; } )
笔记:
在该测试页面上,表单元素实际上是dijit表单小部件,但在此示例中,我将它们视为正常输入标记
第二个dojo.query选择元素中的所有输入元素container
.如果容器有一些唯一的id,你可以通过只有一个dojo.query简化样本:dojo.query('#containerId input').forEach( ...
forEach循环遍历所有找到的输入元素,并对它们应用给定的函数.
更新:使用NodeList的attr
函数而不是设置属性值的快捷方式forEach
.attr首先获取属性名称,然后获取值或具有名称/值对的对象:
var container = dojo.query('div')[13]; dojo.query('input', container).attr('disabled', 'disabled');
要记住的是A Dijit和常规DomNode之间的区别.如果你想在DomNode中使用所有Dijit,你可以从节点转换它们 - > Dijit refs查询没有问题:
// find all widget-dom-nodes in a div, convert them to dijit reference: var widgets = dojo.query("[widgetId]", someDiv).map(dijit.byNode); // now iterate over that array making each disabled in dijit-land: dojo.forEach(widgets, function(w){ w.attr("disabled", "disabled"); }
这真的只是取决于如果你的输入是常规的DOM输入标签或已转化成丰富的Dijit模板(这都做在其中常规输入,只是通过小部件参考控制代替)