iCheck 插件 - ifToggled 取消事件

CRO*_*NUS 6 javascript jquery icheck

是否可以取消 iCheck 对 ifToggled 的操作?我有未经检查的输入:

$('input').iCheck().on('ifToggled', function(e) {
    if (confirm('Don\'t check?')) {
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

输入仍然会被检查(JSFiddle 简单示例)。有什么办法可以取消活动吗?

CRO*_*NUS 5

所以我不得不坚持使用超时的不太好的解决方法

$('input').iCheck({
    checkboxClass: 'icheckbox_flat'
}).on('ifToggled', function(e) {
    if ($('input').is(':checked') && confirm('Don\'t check?')) {
        setTimeout(function() {
           $('input').iCheck('uncheck');
        }, 50);
    }
});
Run Code Online (Sandbox Code Playgroud)

JSFiddle

如果有人有更好的解决方案,很想听听。


seq*_*elo 0

抛出异常似乎会取消事件传播:

$('input').iCheck({
    checkboxClass: 'icheckbox_flat'
}).on('ifToggled', function(e) {
    if ($('input').is(':checked') && confirm('Don\'t check?')) {
        throw "canceled";
    }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/iCheck/1.0.1/skins/flat/flat.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/iCheck/1.0.1/skins/all.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/iCheck/1.0.1/icheck.min.js"></script>
<label>Input <input type="checkbox" value="1" name="input"/></label>
Run Code Online (Sandbox Code Playgroud)

PS:我不喜欢这种方法,但它确实有效。