Javascript 如何获取复选框的先前状态?

Javascript 如何获取复选框的先前状态?,javascript,jquery,html,angularjs,checkbox,Javascript,Jquery,Html,Angularjs,Checkbox,我的应用程序中有一个复选框,如下所示 <input type="checkbox" ng-model="vm.somevalue" indeterminate " /> 您可以添加单击事件,并将状态值存储在数据属性中 $(函数(){ $(“输入[类型=复选框]”) .setCheckbox('unchecked')//设置初始状态 .on('click',函数(e){ var$checkbox=$(此项); 开关($checkbox.data('state')){ 案例0://

我的应用程序中有一个复选框,如下所示

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

您可以添加
单击
事件,并将状态值存储在数据属性中

$(函数(){
$(“输入[类型=复选框]”)
.setCheckbox('unchecked')//设置初始状态
.on('click',函数(e){
var$checkbox=$(此项);
开关($checkbox.data('state')){
案例0://未选中
$checkbox.setCheckbox(“不确定”);
log('Previous state:unchecked | New state:undeterminate');
打破
案例1://不确定
$checkbox.setCheckbox('checked');
log('以前的状态:不确定|新状态:选中');
打破
案例2://已检查
$checkbox.setCheckbox('unchecked');
log('Previous state:checked | New state:unchecked');
打破
}
});
});
$.fn.setCheckbox=函数(状态){
返回$(this).each(函数(){
var$checkbox=$(此项);
如果(状态=='unchecked'){
$checkbox
.data('state',0)
.prop(“不确定”,假)
.prop('checked',false);
}
else if(状态=='Undeterminate'){
$checkbox
.数据('状态',1)
.prop(“不确定”,真)
.removeProp(“选中”);
}
else if(状态=='checked'){
$checkbox
.数据('状态',2)
.prop(“不确定”,假)
.prop('checked',true);
}
});
};

您可以添加一个
单击事件,并将状态值存储在数据属性中

$(函数(){
$(“输入[类型=复选框]”)
.setCheckbox('unchecked')//设置初始状态
.on('click',函数(e){
var$checkbox=$(此项);
开关($checkbox.data('state')){
案例0://未选中
$checkbox.setCheckbox(“不确定”);
log('Previous state:unchecked | New state:undeterminate');
打破
案例1://不确定
$checkbox.setCheckbox('checked');
log('以前的状态:不确定|新状态:选中');
打破
案例2://已检查
$checkbox.setCheckbox('unchecked');
log('Previous state:checked | New state:unchecked');
打破
}
});
});
$.fn.setCheckbox=函数(状态){
返回$(this).each(函数(){
var$checkbox=$(此项);
如果(状态=='unchecked'){
$checkbox
.data('state',0)
.prop(“不确定”,假)
.prop('checked',false);
}
else if(状态=='Undeterminate'){
$checkbox
.数据('状态',1)
.prop(“不确定”,真)
.removeProp(“选中”);
}
else if(状态=='checked'){
$checkbox
.数据('状态',2)
.prop(“不确定”,假)
.prop('checked',true);
}
});
};

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

var check=  $('input[type=checkbox]').length;
使用is()with:checked可将结果作为布尔值,如果选中复选框,则结果为true

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

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

var check=  $('input[type=checkbox]').length;
使用is()with:checked可将结果作为布尔值,如果选中复选框,则结果为true

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

单击事件激发时,复选框的状态已经更改。您可以通过监听
mouseup
事件来获取原始值。这是唯一一次我们可以知道复选框的当前选中状态,并且我们可以确保单击事件将被触发(
mousedown
事件也具有旧值,但仍然可以取消交互)。然后,从
mouseup
处理程序中添加一个一次性
单击
事件处理程序,用于设置状态:

var checkbox=document.getElementById('checkbox');
复选框.addEventListener('mouseup',函数(事件){
if(event.which!==1)返回;
如果(复选框。不确定){
复选框.addEventListener('click',函数(){
checkbox.undeterminate=false;
checkbox.checked=true;
},{once:true});
}否则如果(!checkbox.checked){
复选框.addEventListener('click',函数(){
checkbox.undeterminate=true;
checkbox.checked=false;
},{once:true});
}
},{capture:true})

当触发
单击事件时,复选框的状态已经更改。您可以通过监听
mouseup
事件来获取原始值。这是唯一一次我们可以知道复选框的当前选中状态,并且我们可以确保单击事件将被触发(
mousedown
事件也具有旧值,但仍然可以取消交互)。然后,从
mouseup
处理程序中添加一个一次性
单击
事件处理程序,用于设置状态:

var checkbox=document.getElementById('checkbox');
复选框.addEventListener('mouseup',函数(事件){
if(event.which!==1)返回;
如果(复选框。不确定){
复选框.addEventListener('click',函数(){
checkbox.undeterminate=false;
checkbox.checked=true;
},{once:true});
}否则如果(!checkbox.checked){
复选框.addEventListener('click',函数(){
checkbox.undeterminate=true;
checkbox.checked=false;
},{once:true});
}
},{capture:true})

使用
以获取相反的current@guradio这实际上不起作用,因为
不确定
不是
选中
属性的状态
Undeterminate
是它自己的属性,与选中的
无关。因此,如果复选框是
不确定的
,这并不自动意味着
已选中
为真或假。它可以是。使用
以获取相反的current@guradio这实际上不起作用,因为
不确定