2017-07-13 20 views
0

私はチェックボックスの以前の状態を取得するにはどうすればよいですか?

<input type="checkbox" ng-model="vm.somevalue" indeterminate " /> 

不定がvm.somevalueの値が未定義の場合、チェックボックスの状態を変更しますディレクティブで以下のように私のアプリケーションのチェックボックスを持っています。 中間状態からチェックボックスをクリックすると、チェックボックス(vm.somevalue = false)の選択を解除する必要があります。

ご了承ください。

+2

使用 '!' indeterminate'は 'checked'プロパティの状態ではないので、'、実際には動作しません、現在の – guradio

+0

@guradioの反対を取得します。 'indeterminate'は' checked'とは無関係に、それ自身のプロパティです。したがって、チェックボックスが 'indeterminate'の場合、自動的に' checked'がtrueまたはfalseであることを意味しません。どちらでもかまいません。 – vi5ion

答えて

2

clickイベントを追加し、状態の値をデータ属性に格納することができます。私の例では

$(function() { 
 
    $('input[type=checkbox]') 
 
    .setCheckbox('unchecked') // set initial state 
 
    .on('click', function(e) { 
 
     var $checkbox = $(this); 
 
     switch($checkbox.data('state')) { 
 
     case 0: // unchecked 
 
      $checkbox.setCheckbox('indeterminate'); 
 
      console.log('Previous state: unchecked | New state: indeterminate'); 
 
      break; 
 
     case 1: // indeterminate 
 
      $checkbox.setCheckbox('checked'); 
 
      console.log('Previous state: indeterminate | New state: checked'); 
 
      break; 
 
     case 2: // checked 
 
      $checkbox.setCheckbox('unchecked'); 
 
      console.log('Previous state: checked | New state: unchecked'); 
 
      break; 
 
     } 
 
    }); 
 
}); 
 

 
$.fn.setCheckbox = function(state) { 
 
    return $(this).each(function() { 
 
    var $checkbox = $(this); 
 
    if (state=='unchecked') { 
 
     $checkbox 
 
     .data('state',0) 
 
     .prop('indeterminate',false) 
 
     .prop('checked',false); 
 
    } 
 
    else if (state=='indeterminate') { 
 
     $checkbox 
 
     .data('state',1) 
 
     .prop('indeterminate',true) 
 
     .removeProp('checked'); 
 
    } 
 
    else if (state=='checked') { 
 
     $checkbox 
 
     .data('state',2) 
 
     .prop('indeterminate',false) 
 
     .prop('checked',true); 
 
    } 
 
    }); 
 
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<input type="checkbox"> 
 
<input type="checkbox">

は私が unchecked checkedから indeterminateに切り替えます。 indeterminateから uncheckedまで尋ねただけですが、他の人にも役立つ完全な答えを出したいと思いました。

0

長さを使用できます。ゼロの場合はチェックされません。

var check= $('input[type=checkbox]').length; 

チェックボックスをオンにすると、結果が真となるようにチェックされます。

var check= $('input[type=checkbox]').is(':checked'); 
関連する問題