divコンテナ内のすべての入力フィールドをdojoで無効にする方法はありますか?以下のようなDojo divコンテナ内のすべての入力フィールドを無効にする
何か:
dijit.byId('main').disable -> Input
divコンテナ内のすべての入力フィールドをdojoで無効にする方法はありますか?以下のようなDojo divコンテナ内のすべての入力フィールドを無効にする
何か:
dijit.byId('main').disable -> Input
確かにあります。例えば、この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.queryを1つだけ持つことでサンプルを簡略化できます。dojo.query('#containerId input').forEach(...
更新:NodeListの代わりにforEach
のattr
機能を使用して属性値を設定するためのショートカットもあります。心に留めておくべき他の
var container = dojo.query('div')[13];
dojo.query('input', container).attr('disabled', 'disabled');
何かが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テンプレート(すべてはだけではなく、ウィジェット参照することによって制御さ、その中の通常の入力を持っているもの)
:
dojo.query("input, button, textarea, select", container).attr("disabled", true);
このワンライナーは、指定された内のすべてのフォーム要素を無効にしますコンテナ。
私はこのようにそれを行うだろう:
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の下にすべてのウィジェットを取得することが不可欠です。