2009-09-03 15 views

答えて

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のフォームウィジェットですが、このサンプルでは、​​私が治療していますがそれらは通常の入力タグのようになります
  • 第2のdojo.queryはcontainer要素内のすべての入力要素を選択します。コンテナにいくつかの一意のIDがある場合は、dojo.queryを1つだけ持つことでサンプルを簡略化できます。dojo.query('#containerId input').forEach(...
  • forすべての見つかった入力要素をループし、指定した関数を適用します。

更新:NodeListの代わりにforEachattr機能を使用して属性値を設定するためのショートカットもあります。心に留めておくべき他の

var container = dojo.query('div')[13]; 
dojo.query('input', container).attr('disabled', 'disabled'); 
6

何かがDijitにし、定期的なDOMNODEの差です:attrは、最初の属性名とその値または名前/値のペアを持つオブジェクトを受け取ります。あなたはすべてのDijitのはDOMNODE以内たい場合は、ノードからそれらを変換することができます - > [クエリでの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 inputタグであるかに変換された場合に依存私はそれを行う方法ですが豊富なのDijitテンプレート(すべてはだけではなく、ウィジェット参照することによって制御さ、その中の通常の入力を持っているもの)

10

dojo.query("input, button, textarea, select", container).attr("disabled", true); 

このワンライナーは、指定された内のすべてのフォーム要素を無効にしますコンテナ。

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の下にすべてのウィジェットを取得することが不可欠です。

関連する問題