2016-09-28 11 views
0

ng-repeatで生成されているテーブルにチェックボックスがあります。javascriptでチェックされたプロパティがtrueに設定されていると、チェックボックスがチェックインされていない

<input type="checkbox" id="chkView{{::myObj.TeamId}}" 
    ng-disabled="disableView(myObj)" 
    ng-click="setViewSelection(myObj.TeamId, this.checked)"> 

チェックボックスが何ng-model属性を持っていないし、これは意図的なものだった:

チェックボックスは、次のように定義されています。私は、各チェックボックスのステータスをcheckedのjavascriptで直接制御したいと思っていました。

何らかの理由で、チェックボックスが応答しないため、checkedのプロパティがjavascriptで更新されています。私はJavaScriptでこの文を持っているのであれば:

document.getElementById('chkView27').checked = true;` 

それはプログラムで動作します、私は

console.log(document.getElementById('chkView27').checked); 

を行うことができますし、それはコンソールにtrueを印刷します。しかし、ブラウザのUIには反映されていません。ブラウザでは、チェックボックスはオフのままです。私は事実の後にチェックボックスのcheckedプロパティに何も影響していないことを確認しました。 UIは更新されません。どうしてこれなの?

EDIT:プラサドの提案を1として、私はこのような$scope.$applyでステートメントをラップ試してみました:

$scope.$apply(function() { 
    document.getElementById('chkView27').checked = 'checked'; 
}); 

しかし、これは単に「アクションすでに進行中」エラーをスローする角度の原因となります。 ?

https://docs.angularjs.org/error/ $ rootScope/INPROG P0 = $ダイジェスト

+0

ここで 'ng-model'を使うべきです。 –

+0

@PankajParkarここではリファクタリングなしでng-modelを使うことはできませんので、バニラのjavascriptを使って解決策を見つけたいと思います。 – Legion

+0

'ng-click'の代わりに' ng-change'を試してみてください。正しい値を提供します –

答えて

0

設定するだけでなく、 "確認" の文字列へのchecked属性:JavaScriptで行わ

document.getElementById('chkView27').checked = 'checked'; 
+0

あなたの提案通りに試しました。残念ながら、それは動作しませんでした。興味深いことに、 'checked'プロパティを 'checked'に設定した後、この' console.log(document.getElementById( 'chkView27')。checked); 'は' true'を返し、 'checked'を返しません。 – Legion

+0

私も "チェックされて"言ったので、両方を試してみてください: document.getElementById( 'chkView27')。checked = true; document.getElementById( 'chkView27')。checked = 'チェック済み'; –

0

DOM操作は直接文句を言わない、DOMに影響を与えているため角度が分からない。コントローラーでこれを直接実行している場合、正常に動作します。しかし、普通のjavascriptでそれをやっているのなら、$ applyを使ってDOMに変更を加えたことを角度に知らせる必要があります。角度が更新されます。

+0

私はコントローラでこれをやっていますが、それでもUIには影響しません。私は現在$ applyを見ています... – Legion

+0

'$ scope。$ apply'を試しましたが、うまくいきませんでした。上記の私の編集を参照してください。 – Legion

+0

あなたのコードにjsfiddleを投稿しますか?自分でやろうとしたので、私のために働きました。 – prasad

関連する問題