有没有办法禁用带有dojo的div容器中的所有输入字段?
类似的东西:
dijit.byId('main').disable -> Input
答案 0 :(得分:11)
我就是这样做的:
dojo.query("input, button, textarea, select", container).attr("disabled", true);
这个单行禁用给定容器中的所有表单元素。
答案 1 :(得分:7)
当然有。例如,打开此form test page,启动FireBug并在控制台中执行:
var container = dojo.query('div')[13];
console.log(container);
dojo.query('input', container).forEach(
function(inputElem){
console.log(inputElem);
inputElem.disabled = 'disabled';
}
)
注意:
container
元素中的所有输入元素。如果容器具有一些唯一ID,则可以通过只有一个dojo来简化示例。查询:dojo.query('#containerId input').forEach( ...
更新:还有一个使用NodeList attr
函数而非forEach
设置属性值的快捷方式。 attr首先获取属性名称,然后获取值或具有名称/值对的对象:
var container = dojo.query('div')[13];
dojo.query('input', container).attr('disabled', 'disabled');
答案 2 :(得分:6)
要记住的是A Dijit和常规DomNode之间的区别。如果你想在DomNode中使用所有Dijit,你可以从节点转换它们 - > Dijit引用查询没问题:
// 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模板(它们都有常规输入,只是由小部件引用控制)
答案 3 :(得分:1)
我会这样做:
var widgets;
require(["dijit/registry", "dojo/dom"], function(registry, dom){
widgets = registry.findWidgets(dom.byId(domId));
});
require(["dojo/_base/array"], function(array){
array.forEach(widgets, function(widget, index) {
widget.set("disabled", true);
});
});
方法findWidgets对于获取特定DOM下的所有小部件至关重要。