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

opH*_*AME 2 dojo input

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

就像是:

dijit.byId('main').disable -> Input
Run Code Online (Sandbox Code Playgroud)

Eug*_*kin 11

这就是我这样做的方式:

dojo.query("input, button, textarea, select", container).attr("disabled", true);
Run Code Online (Sandbox Code Playgroud)

此单行禁用给定容器中的所有表单元素.


Mai*_*ine 7

当然有.例如,打开此表单测试页面,启动FireBug并在控制台中执行:

var container = dojo.query('div')[13];
console.log(container);
dojo.query('input', container).forEach(
  function(inputElem){
    console.log(inputElem);
    inputElem.disabled = 'disabled';
  }
)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 在该测试页面上,表单元素实际上是dijit表单小部件,但在此示例中,我将它们视为正常输入标记
  • 第二个dojo.query选择元素中的所有输入元素container.如果容器有一些唯一的id,你可以通过只有一个dojo.query简化样本:dojo.query('#containerId input').forEach( ...
  • forEach循环遍历所有找到的输入元素,并对它们应用给定的函数.

更新:使用NodeListattr函数而不是设置属性值的快捷方式forEach.attr首先获取属性名称,然后获取值或具有名称/值对的对象:

var container = dojo.query('div')[13];
dojo.query('input', container).attr('disabled', 'disabled');
Run Code Online (Sandbox Code Playgroud)


小智 6

要记住的是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"); }
Run Code Online (Sandbox Code Playgroud)

这真的只是取决于如果你的输入是常规的DOM输入标签或已转化成丰富的Dijit模板(这都做在其中常规输入,只是通过小部件参考控制代替)