【问题标题】:iCheck undo checkiCheck 撤消检查
【发布时间】:2016-05-12 03:24:37
【问题描述】:

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

现在,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 中删除选中的类,但结果相同。是因为我在 check 事件中执行吗?

$('#Lve_InclWE').closest("div").removeClass("checked");

update3:我在“ifChecked”事件结束时添加了一个警报,并注意到该复选框实际上未被选中,但在事件结束后它返回到选中状态。这意味着我无法在触发的事件中执行撤消检查(取消检查),您能想到任何方法吗?

【问题讨论】:

  • 你能加一个jsfiddle DEMO吗?
  • @GuruprasadRao 以前从未使用过 jsFiddle。刚刚尝试但失败了。

标签: jquery icheck


【解决方案1】:

解决方案和可能的唯一解决方案是在事件结束后取消选中复选框,使用 setTimeOut(fn,0)

$("#Lve_InclWE").on('ifChecked', function(event){
    if(!validation()){
        setTimeout(function(){
            $('#Lve_InclWE').iCheck('uncheck');
        },0);
    }
});

原因是因为复选框在触发事件后总是设置为选中状态。

如果您有其他解决方案,请随时发表评论。

【讨论】:

    【解决方案2】:

    一种可能的解决方案是销毁并重新创建 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
            */
        }       
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2019-08-04
      • 2014-09-17
      • 2012-05-03
      • 1970-01-01
      • 2020-01-08
      相关资源
      最近更新 更多