iCheck撤消检查

时间:2016-05-12 03:24:37

标签: jquery icheck

我想在选中复选框时进行一些验证,如果验证失败则取消选中它。

现在,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”事件结束时添加了一个提醒,并注意到该复选框实际上未经检查,但在事件结束后返回到已检查状态。这意味着我无法在触发事件中执行撤消检查(取消选中),您能想到的任何方法?

2 个答案:

答案 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
        */
    }       
});