Dojo禁用div容器中的所有输入字段

时间:2009-09-03 07:55:54

标签: input dojo

有没有办法禁用带有dojo的div容器中的所有输入字段?

类似的东西:

dijit.byId('main').disable -> Input

4 个答案:

答案 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';
  }
)

注意:

  • 在该测试页面上,表单元素实际上是dijit表单小部件,但在此示例中,我将它们视为正常输入标记
  • 第二个dojo.query选择container元素中的所有输入元素。如果容器具有一些唯一ID,则可以通过只有一个dojo来简化示例。查询:dojo.query('#containerId input').forEach( ...
  • 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下的所有小部件至关重要。