2017-07-13 37 views
0

我有一个像下面我们如何获得复选框的先前状态?

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

不确定的是,这将改变复选框的状态时vm.somevalue的值是不确定的一个指令,在我的应用程序的复选框。 现在,当我点击中间状态的复选框时,我需要取消选中复选框(vm.somevalue = false)。

任何帮助赞赏!

+2

使用'!'来获取当前 – guradio

+0

@guradio不实际工作的对立面,因为'indeterminate'不是'checked'财产的状态。 'indeterminate'是它自己的一个属性,与'checked'无关。所以如果一个复选框是“不确定”,并不意味着'checked'是真或假。它可以是。 – 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">

在我的例子我切换从uncheckedindeterminatechecked。我知道你只要求indeterminateunchecked,但我想给出一个完整的答案,可能对其他人也有用。

0

您可以使用长度,如果它为零则不检查。

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

使用is()with:勾选以获得结果为布尔值,如果复选框被选中,则为true。

var check= $('input[type=checkbox]').is(':checked');