2017-09-09 1 views
1

フォームでチェック/選択された連絡先のチェックボックスの数を数えようとしています。 実際に2倍になる以下のコードスニペットでは何が間違っている可能性がありますか?フォームでチェックされたチェックボックスの数を確認すると、実際の数が倍になります

HTML:

<div ng-hide ="onOff"> 
<span class="ctCheckBox" ng-class="{'searchDataCheckbox':searchView}"> 
<label class="atl-check-box-label"> 
<input type="checkbox" class="atl-check-box" ng-checked="iscontactChecked(info.userId)" ng-click ="grpAct()"> 
<span class="fntIcons appFtIcns"></span> 
</label> 
</span> 
</div> 
<div ng-hide ="!onOff"> 
<span class="ctCheckBox" ng-class="{'searchDataCheckbox':searchView}"> 
<label class="atl-check-box-label"> 
<input type="checkbox" class="atl-check-box" ng-checked="iscontactChecked(info.userId)" ng-click ="grpAct()"> 
<span class="fntIcons appFtIcns"></span> 
</label> 
</span> 
</div> 

HTMLフォームは、巨大な一つであり、それはあまりにも他の場所で<span class="ctCheckBox" ..<input type="checkbox" class="atl-check-box" ..の両方を持っています。ただし、上記のHTMLコードのみがアプリケーションビューに表示されます。

JS:

$scope.selectedContactsCount = angular.element('.ctCheckBox input:checked').length; 
alert('1st alert: ' +$('input:checkbox:checked').length); 
alert('2nd alert: ' +$('.atl-check-box input:checked').length); 

上記3つのJS文のすべてが選択されたチェックボックスの間違った数を得:

  1. 第一1は、二重、実際の選択]チェックボックスが
  2. についてはカウントできます第2、カウントは27
  3. 第3の場合、カウントは0です。

例:アプリケーションビューに表示されている連絡先が2つだけ選択されている場合は、選択された連絡先の数として4が表示され、3つの連絡先が選択されている場合は6が選択された連絡先の数など。

何か不足していますか?

ご協力いただきありがとうございます。

+0

あなたが持っていると思うより多くの要素がセレクタに一致します。 2番目の例は何も返さないでしょうか? – adeneo

+0

@adeneo、迅速な対応に感謝します。 HTMLフォームでは、同じスパンのチェックボックスと他の場所に入力するチェックボックスのクラス名がありますが、アプリケーションビューではこれらのチェックボックスの数だけが表示されています。 –

+0

上記のクエリで2番目のJS文を修正しました。セレクタに一致する要素が増えたことを確認し、カウントを修正して適切な値を表示するにはどうすればよいですか? –

答えて

0

私は私の問題の解決策を見つけました。カウントが2倍になった本当の理由は、ng-ifではなく、ng-hideの使用によるもので、非表示または表示されているにもかかわらずDOMで選択された連絡先が表示され、angular.element('.ctCheckBox input:checked').lengthが2回出現(重複)しました。同じチェックボックス。 ng-ifは、チェックボックスがDOMで条件付きでレンダリングされるようになった今、この問題を解決しました。しかし、アプリケーションの初期ローディングには、調査される連絡先動作のリストの変更があります。

関連する問題