2011-01-26 19 views
2

私は現在dojoチェックボックスグループ( "some_name []"という形式の名前を持つdijit.form.CheckBox)を持っています。これは望み通りに動作しますが、selectボタン/リンクをすべて追加する必要があります。好ましくは別のチェックボックスではありません(これは機能がjsで実装されている場合は必要ありません)。dojoチェックボックスグループのすべてを選択

標準のjを使用すると、要素をうまく取得するように見えるが、element.checked = trueを設定しても効果はありません。テスト目的のために、私はdijit.form.CheckBoxを無効にしました(私は定期的な標準チェックボックスを持っています)、dojo'ifiedのときに失敗したコードでチェックされたすべてのボックスにマークを付けることができました。

私は道場1.5を実行していることは何の違い

UPDATE行う場合:

OKを、それが/未チェックではなく、再レンダリングDojoウィジェットチェックする]チェックボックスを設定しているようです。私はまた、チェックボックスに、dijit.form.CheckBoxオブジェクト(set()メソッドのようなもの)として持っていると思われるメソッドをチェックボックスに持たないと伝えられています。

答えて

6

にそれを渡すだから私は、問題が何であったかが分かりました。私はdojo.query()を実行してチェックボックスグループdomノードを取得していました。ただし、これはdijitウィジェットを返しません。

nodes = dojo.query('[name=\"checkbox_group[]\"]'); 
dojo.forEach(nodes,function(node) 
    {dijit.getEnclosingWidget(node).set("checked",true);}); 

ウィジェットを操作することによって、視覚的に正しく更新されます。また、チェックボックス入力要素がウィジェット自体ではないことに気づいていなかったので、チェックボックスノードが初期化されたdijitウィジェットと一致しないため、dijit.byNode(node)は未定義を返します。

0

以下のようにします。これは、ページがロードされたときに呼び出される「addHandlers」関数でハンドラとして使用される他の多くのものか​​らトリミングされます。

selectallclearallは、リンク先のリンクです。

var selectall = dojo.byId('selectall'); 
var clearall = dojo.byId('clearall'); 

var checklist = getCheckboxList(); // Magic happens here (1) 

dojo.connect(selectall, "onclick", 
    function(evt) { 
     allClick(evt, checklist, true); 
    } 
); 

dojo.connect(clearall, "onclick", 
    function(evt) { 
     allClick(evt, checklist, false); 
    } 
); 

(1)私たちは、いくつかの醜い基準に基づいて影響を受けることになりますチェックボックスのリストを取得し、我々は、このチェック/クリアすべてより多くのためのリストを使用する - あなたはおそらくはるかに簡単な何かを行うことができますあなたを得るために。

「allClick」機能物事のリストをチェックしたりチェックを解除あなたは

function allClick(evt, list, checkstate) 
{ 
    dojo.forEach(list, 
     function(el, idx, ary) { 
      el.checked = checkstate; 
     } 
    ); 
    evt.preventDefault(); // keep the link from firing 
} 
+0

これは私がやっていることです。問題はdojoがe1.checked = trueをオーバーライドしているようです。 – Endophage

+0

私は以下の答えを見つけました。申し訳ありませんが私は元の質問ではっきりすることはできませんでした、私はまだ道場の周りに自分の道を見つけると頻繁に私は行方不明のパズルの一部を知らない。 – Endophage

0

誰もが(4年後)これを行うための別の方法の答えのために、このを見て、そして今そこにある場合には:

var checkboxes = registry.findWidgets(dom.byId('checkGroupWrapper')); 

checkboxes.forEach(function (checkboxWidg) { 
    checkboxWidg.set('checked', true); 
}); 

this documentationを参照してください。

関連する問題