我想在选中复选框时进行一些验证,如果验证失败则取消选中它。
现在,checked属性为false,但复选框仍保持选中状态。
我的代码:
$("#Lve_InclWE").on('ifChecked', function(event){
some_function();
if(!some_validation())
$('#Lve_InclWE').iCheck('uncheck');
});
HTML:
<div class="icheckbox_flat-green checked" style="position: relative;">
<input type="checkbox" class="icheck" id="Lve_InclWE" name="Lve_InclWE" style="position: absolute; opacity: 0;">
update1:即使我这样做,问题仍然存在:
$("#Lve_InclWE").removeProp("checked");
//$("#Lve_InclWE").prop("checked",false);
$("#Lve_InclWE").iCheck('update');
update2:尝试删除父div的已检查类,但相同。是因为我在检查事件中执行了吗?
$('#Lve_InclWE').closest("div").removeClass("checked");
update3:我在“ifChecked”事件结束时添加了一个提醒,并注意到该复选框实际上未经检查,但在事件结束后返回到已检查状态。这意味着我无法在触发事件中执行撤消检查(取消选中),您能想到的任何方法?
答案 0 :(得分:1)
解决方案和可能唯一的解决方案是使用setTimeOut(fn,0)取消选中事件结束后的复选框
$("#Lve_InclWE").on('ifChecked', function(event){
if(!validation()){
setTimeout(function(){
$('#Lve_InclWE').iCheck('uncheck');
},0);
}
});
原因是因为复选框在触发事件后始终设置为已检查状态。
如果您有其他解决方案,请随时发表评论。
答案 1 :(得分:0)
一种可能的解决方案是销毁并重新创建iCheck。
$("#Lve_InclWE").on('ifChecked', function(event){
some_function();
if(!some_validation()){
$('#Lve_InclWE').iCheck('destroy');
$('#Lve_InclWE').prop('checked', true);
/*
Now reinitialize iCheck for #Lve_InclWE
*/
}
});